- 不建议在构造函数中抛出异常。当构造函数中抛出异常时,析构函数将不会被执行,需要手动释放内存。
- 析构函数不应该抛出异常。当析构函数中有一些可能发生的异常时,这时候要把可能发生的异常完全封装在析构函数内部,决不能让它抛出到函数之外。
测试代码:
#include <iostream>
using namespace std;class A {
public:A(){cout << "construction fun " << endl;throw 1;}~A(){cout << "destruction fun " << endl;throw 2;}
};int main()
{try{A a;}catch (...)//catch all{cout << "caught!" << endl;}return(0);
}
输出结果:
参考资料:
1. C++中构造函数和析构函数可以抛出异常吗?
2. 构造函数、析构函数抛出异常的问题