- 不建议在构造函数中抛出异常。当构造函数中抛出异常时,析构函数将不会被执行,需要手动释放内存。
- 析构函数不应该抛出异常。当析构函数中有一些可能发生的异常时,这时候要把可能发生的异常完全封装在析构函数内部,决不能让它抛出到函数之外。
测试代码:
#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. 构造函数、析构函数抛出异常的问题