现在的位置: 首页 > 综合 > 正文

构造和析构异常

2012年01月11日 ⁄ 综合 ⁄ 共 638字 ⁄ 字号 评论关闭

http://blog.csdn.net/jixingzhong/article/details/1844531

构造函数异常,可以总结如下:
1.C++中通知对象构造失败的唯一方法那就是在构造函数中抛出异常;
2.构造函数抛出异常时,析构函数将不会被执行;
3.抛出异常时,其子对象将被逆序析构。(参考析构过程)

析构函数异常相对要复杂一些,存在一种冲突状态,程序将直接崩溃:异常的被称为“栈展开(stack unwinding)”【备注】的过程中时,从析构函数抛出异常,C++运行时系统会处于无法决断的境遇,因此C++语言担保,当处于这一点时,会调用terminate()来杀死进程。因此,当处理另一个异常的过程中时,不要从析构函数抛出异常。概括总结如下:
1.C++中析构函数的执行不应该抛出异常;
2.当在某一个析构函数中会有一些可能(哪怕是一点点可能)发生异常时,那么就必须要把这种可能发生的异常完全封装在析构函数内部,决不能让它抛出函数之外(这招简直是绝杀!呵呵!);
3.抛出异常时,其子对象将被逆序析构。(参考析构过程)

参考资料:
[1] 异常和错误处理(C++ FAQ),http://www.sunistudio.com/cppfaq/exceptions.html
[2] 构造函数中抛出的异常, http://51cmm.csai.cn/ExpertEyes/No143.htm
[3] 析构函数中抛出的异常, http://se.csai.cn/ExpertEyes/No144.htm

抱歉!评论已关闭.