在DTOR中引发异常

时间:2013-03-08 11:57:26

标签: c++ g++

我是C ++的新手,对以下问题感到有些困惑:

当DTOR抛出异常时会发生什么? 物体是否仍在被摧毁?

提前致谢。

2 个答案:

答案 0 :(得分:1)

  

一般来说:这是一个坏主意吗?

,非常糟糕。

不要从析构函数中抛出异常。如果在抛出另一个异常之后抛出异常,但在catch处理程序捕获该异常之前,您的程序将被强制终止。

由于在抛出异常时在堆栈展开期间调用析构函数,如果其中一个抛出另一个异常,则会立即终止程序。不太好。

避免从析构函数中抛出异常(或将它们包装到try / catch块中,这样就不会在析构函数之外传播它们。这样做是一个糟糕的编程实践。

来自C ++ 11标准的第15.2 / 3段:

  

为从try块到try的路径构造的自动对象调用析构函数的过程   抛出异常的点称为“堆栈展开”。如果在堆栈展开期间调用析构函数   退出时有异常,调用std :: terminate(15.5.1)。 [注意:所以析构函数通常应该抓住   异常,不要让它们从析构函数中传播出来。 -end note]

答案 1 :(得分:0)

是的,它是bad idea。没有合理的方法来确定你是否可以安全地投掷。