异常相关问题

说一下断言的缺陷:断言在release版本下不起作用。

常说的抛异常就是throw+对象。

try块和catch块必须是同时存在并且是相邻(即中间没有任何语句)的。

抛异常必须在try的花括号{}里,如果throw+对象这条语句不在任意try块里,会报错。C++ 异常处理使用 try、throw 和 catch 三个关键词来完成,在程序执行过程中,异常处理流程大致如下:当函数体内某处发生异常(throw 异常)时,会检查该异常发生的位置是否在当前函数的某个 try 块之内,如果在的话,那么就需要找出与该 try 块配套的 catch 块。如果 catch 不匹配或者不在当前函数的某个 try 块的话,则沿着函数调用链逐层向上查找。当回退到上一层函数后,重复前面的操作。

捕捉异常对应的操作就是catch(参数列表),注意参数类型要和对象类型匹配。

catch(...)表示捕捉任意对象,是捕捉的最后一道保险。

抛出异常对象后,会生成一个异常对象的拷贝,因为抛出的异常对象可能是一个临时对象,
所以会生成一个拷贝对象,这个拷贝的临时对象会在被catch以后销毁。(这里的处理类似
于函数的传值返回

可以在一个try{}外面跟若干个catch(参数),如下图。

空间泄漏的问题,如下图:

 接下来是正确写法,如图:注意下面写法在声明array2的位置将它初始化成了nullptr,然后在try块里重新开辟空间并赋值。为什么不直接在try块里写成一句如:int*array2=new int【10】呢?因为假如new失败,那直接就跳转到了catch块里delete,由于new失败没有返回值,此时array2就指向一个未知的空间,delete这块空间也就非法了。

异常规范,如下图: 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值