《Effective C++》条款08

来源:互联网 发布:卫星地图下载软件 编辑:程序博客网 时间:2024/05/16 07:04

条款08:别让异常逃离析构函数
考虑如下代码:

class Test{    public:        ~Test(){...}   //假设这个析构函数会抛出一个异常;};void dosomething(){    vector<Test> v;    ...             }                     //v在这里自动销毁

当 v被销毁,v内所有Test都应该全部销毁。假设v内含有10个Test,而在析构第一个元素期间,有个异常被抛出。其它9个Test也应该全部被销毁(负责他们保存任何资源都会发生资源泄露),当第二个Test元素销毁时调用析构函数又抛出异常,现在有两个同时作用的异常,这对C++而言太多了。在两个异常同时存在的情况下,程序若不是结束执行就是导致不明确的行为,本例中它会导致不明确行为,同理,其他stl库中的容器也会出现同样情况。

注意:析构函数绝对不要抛出异常。

原创粉丝点击