码迷,mamicode.com
首页 > 编程语言 > 详细

《Effective C++》——条款08:别让异常逃离析构函数

时间:2015-07-14 13:30:34      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

考虑如下代码:

class Widget{
public:
...
~Widget(){...}//假设这个可能吐出一个异常
};
void doSomething()
{
    std::vector<Widget>v;  
}//v在这里被销毁

 当vector v被销毁,它有责任销毁其内含的所有Widgets。假设v内含十个Widgets,而在析构第一个元素期间,有个异常被抛出。其他九个Widgets还是应该被销毁,因此v应该调用它们各个析构函数。假设在调用期间,第二个Widget析构函数又抛出异常。现在有两个同时作用的异常,这对C++而言太多了。在这两个异常同时存在的情况下,程序若不是结束执行就是导致不明确行为。本例中它会导致不明确的行为。容器或array并非遇上麻烦的必要条件,只要析构函数突出异常,即使并非使用容器或arrays,程序也可能过早结束或出现不明确行为。

 

如果你的析构函数必须执行一个动作,而该动作可能会在失败时抛出异常,该怎么办?

 

《Effective C++》——条款08:别让异常逃离析构函数

标签:

原文地址:http://www.cnblogs.com/happygirl-zjj/p/4645109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!