概念
异常的处理过程
catch捕获类型匹配
不可隐式类型转换
函数调用链中异常栈展开匹配规则(throw处理规则)
异常的重新抛出
异常捕获后还可以再抛出(catch中也可以throw)
Tips
throw后不catch也会终止程序
catch(...)可防止终止,但不知道错误类型
基类可接收派生类(非常有用)
异常体系
异常导致的内存泄漏
函数中抛异常有return作用,会提前终止函数,可能导致内存泄漏
注意,catch(...)捕捉异常后,可直接throw抛出,不用加类型或名称。
new的异常导致内存泄漏
如果第二个new抛异常,第一个new会导致内存泄漏
以上两种情况最好智能指针管理
构造和析构最好不要抛异常
可能构造不完整,析构不完全
异常规范
C++异常优缺点
优点
缺点
总结
利大于弊,大势所趋