exception异常
c++的开空间new与c语言开空间malloc的巨大不同是new失败会抛异常
c语言遇到越界等内存错误会发生崩溃。不是严重的内存错误会返回错误码
抛异常throw
当程序遇到解决不了的错误,扔出异常提醒程序员处理。throw可以抛出任何类型的对象。示例如下
捕获异常 try catch
抛出异常后必须进行捕获,捕获的对象类型需要和抛出的对象类型相同,类似于函数传参
try有抛异常的函数,然后catch (throw的对象)。如上图,出现异常后,函数后面的代码不会执行。当异常被捕获后,代码可以正常执行。到main函数执行结束,如果还有异常没有被捕获就会程序终止。
被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那一个。
为了因异常未捕获导致程序终止,在捕获异常的最后使用catch(…)将所有未捕获异常都捕获
抛出派生类对象,用基类捕获
异常安全
当new对象后,抛出异常,执行流就会跳转到catch捕获的地方,而不会进行后面的delete释放,引发内存泄漏的异常安全。
在构造和析构的过程中不要抛异常
C++11 中新增的noexcept,表示不会抛异常