我是C ++的新手,对以下问题感到有些困惑:
当DTOR抛出异常时会发生什么? 物体是否仍在被摧毁?
提前致谢。
答案 0 :(得分:1)
一般来说:这是一个坏主意吗?
是,非常糟糕。
不要从析构函数中抛出异常。如果在抛出另一个异常之后抛出异常,但在catch
处理程序捕获该异常之前,您的程序将被强制终止。
由于在抛出异常时在堆栈展开期间调用析构函数,如果其中一个抛出另一个异常,则会立即终止程序。不太好。
避免从析构函数中抛出异常(或将它们包装到try
/ catch
块中,这样就不会在析构函数之外传播它们。这样做是一个糟糕的编程实践。
来自C ++ 11标准的第15.2 / 3段:
为从try块到try的路径构造的自动对象调用析构函数的过程 抛出异常的点称为“堆栈展开”。如果在堆栈展开期间调用析构函数 退出时有异常,调用std :: terminate(15.5.1)。 [注意:所以析构函数通常应该抓住 异常,不要让它们从析构函数中传播出来。 -end note]
答案 1 :(得分:0)
是的,它是bad idea。没有合理的方法来确定你是否可以安全地投掷。