2013-03-08 78 views
-1

我是C++新手,对以下事项有些困惑:DTOR引发的异常

当DTOR引发异常时会发生什么? 对象是否仍然被销毁?

在此先感谢。

+0

已经讨论过这里100500次,使用搜索 – 2013-03-08 11:58:43

+0

另外:http://www.parashift.com/c++-faq/dtors-shouldnt-throw.html – Spook 2013-03-08 12:05:54

+0

我编辑它 - 离开只有关于物体是否被破坏的问题 – cookya 2013-03-08 12:29:41

回答

1

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

,非常糟糕的一个。

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

由于在堆栈展开期间调用堆栈展开时引发异常时,如果其中一个引发另一个异常,则会立即终止您的程序。不太好。

避免析构函数抛出异常(或它们包装成try/catch块,这样你不传播他们的析构函数外)。这样做是不好的编程实践。

从第15.2/C++的11标准的3:

要求,其中将引发异常的路径上构成从try块到 点自动对象的析构函数的过程被称为“堆栈展开”。如果在堆栈展开期间调用的析构函数在退出时出现异常,则调用std :: terminate(15.5.1)。 [注意:因此,析构函数通常应该捕获 异常,并且不让它们传播出析构函数。末端注]

0

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