构造函数析构函数抛出异常
2017-08-01 10:41
811 查看
从语法上来说,构造函数和析构函数都可以抛出异常。但从逻辑上和风险控制上,构造函数可以,析构函数不推荐抛出异常。
1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。 [正常情况下调用析构函数抛出异常导致资源泄露]
2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。 在发生异常的情况下调用析构函数抛出异常,会导致程序崩溃。
如果析构函数中异常非抛不可,那就用try catch来将异常吞下,必须要把这种可能发生的异常完全封装在析构函数内部,决不能让它抛出函数之外。
1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。 [正常情况下调用析构函数抛出异常导致资源泄露]
2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。 在发生异常的情况下调用析构函数抛出异常,会导致程序崩溃。
如果析构函数中异常非抛不可,那就用try catch来将异常吞下,必须要把这种可能发生的异常完全封装在析构函数内部,决不能让它抛出函数之外。
相关文章推荐
- 构造函数与析构函数是否可以抛出异常
- 构造函数、析构函数抛出异常的问题http://www.cnblogs.com/fly1988happy/archive/2012/04/11/2442765.html
- C++构造函数、析构函数与抛出异常
- 构造函数、析构函数可以抛出异常吗?为什么?(一道百度面试题)
- [c/c++]构造函数、析构函数中可不可以抛出异常
- 构造函数可以抛出异常、析构函数不可也不能抛出异常
- C++之构造函数、析构函数抛出异常的问题
- 构造函数、析构函数抛出异常的问题
- 在构造函数抛出异常后析构函数将不再被调用!!!!!!!!!!!!!
- C++关于构造函数 和 析构函数 能否抛出异常的讨论
- 构造函数、析构函数抛出异常
- C++中构造函数和析构函数抛出异常问题
- 构造函数、析构函数抛出异常的问题
- 关于构造函数 和 析构函数 能否抛出异常的讨论
- 构造函数与析构函数中抛出异常
- 构造函数、析构函数抛出异常的问题
- 构造函数、析构函数抛出异常的问题
- 【effective c++】C++构造函数、析构函数与抛出异常
- C++中构造函数和析构函数可以抛出异常吗?
- 是否能在构造函数,析构函数中抛出异常?