析构函数不能失败的理由

析构函数非常特殊,编译器将在不同的上下文中自动调用。由于其特殊性, C++ 标准有如下建议:在栈展开过程中,如果析构函数抛异常, terminate 函数将被调用。 因此,析构函数应该总是能够捕获异常,并且不会让异常传播到析构函数之外。 (STL 中的所有析构函数均不会失败 ) 。

 

对于析构函数可能抛出异常的类,将有如下限制:

  1. 无法用于函数;当作为临时变量 ( 对象 ) ,在析构时抛异常将导致程序异常终止。
  2. 不能被继承:派生类的析构过程也将可能抛出异常;无法作为全局或静态变量。
  3. 无法用于数组。数组无法正确的回滚,行为可能未定义。假如数组有 10 个元素,创建时出错 ( 构造函数抛异常 ) ,而回滚时需调用析构函数,但此过程有可能出现一个或多个异常。
  4. 无法用于 STL 容器中, STL 禁止所有一起使用的对象析构时抛异常。

原文链接: https://www.cnblogs.com/wenchchgz/archive/2012/11/13/2768623.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    析构函数不能失败的理由

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/69262

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午1:43
下一篇 2023年2月9日 下午1:44

相关推荐