说一下断言的缺陷:断言在release版本下不起作用。
常说的抛异常就是throw+对象。
try块和catch块必须是同时存在并且是相邻(即中间没有任何语句)的。
抛异常必须在try的花括号{}里,如果throw+对象这条语句不在任意try块里,会报错。C++ 异常处理使用 try、throw 和 catch 三个关键词来完成,在程序执行过程中,异常处理流程大致如下:当函数体内某处发生异常(throw 异常)时,会检查该异常发生的位置是否在当前函数的某个 try 块之内,如果在的话,那么就需要找出与该 try 块配套的 catch 块。如果 catch 不匹配或者不在当前函数的某个 try 块的话,则沿着函数调用链逐层向上查找。当回退到上一层函数后,重复前面的操作。
捕捉异常对应的操作就是catch(参数列表),注意参数类型要和对象类型匹配。
catch(...)表示捕捉任意对象,是捕捉的最后一道保险。
可以在一个try{}外面跟若干个catch(参数),如下图。

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

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

异常规范,如下图:


被折叠的 条评论
为什么被折叠?



