条款08:别让异常逃离析构函数
考虑如下代码:
class Test
{
public:
~Test(){...} //假设这个析构函数会抛出一个异常;
};
void dosomething()
{
vector<Test> v;
...
} //v在这里自动销毁
当 v被销毁,v内所有Test都应该全部销毁。假设v内含有10个Test,而在析构第一个元素期间,有个异常被抛出。其它9个Test也应该全部被销毁(负责他们保存任何资源都会发生资源泄露),当第二个Test元素销毁时调用析构函数又抛出异常,现在有两个同时作用的异常,这对C++而言太多了。在两个异常同时存在的情况下,程序若不是结束执行就是导致不明确的行为,本例中它会导致不明确行为,同理,其他stl库中的容器也会出现同样情况。
注意:析构函数绝对不要抛出异常。