标签:
考虑如下代码:
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