2008-10-16

不要析构函数中抛出异常

Effective C++ 第3版45页第5行告诉我们:
不要析构函数中抛出异常, 因为C++中同时出现两个异常意味着不确定行为.
大家可以运行下面这段程序看一下结果.

#include "stdafx.h"
#include
#include
using namespace std;

class A
{
public:
~A()
{
cout << "~A()" << endl;
throw 3;
}
};

int _tmain(int argc, _TCHAR* argv[])
{

try
{
A a;
A a2;

}
catch(...)
{
cout << "exception catched" << endl;
}

return 0;
}

另外作者为我们提供了一些对策来处理析构中的异常.详情参见effective c++ 第3版45页