<分区>
似乎您不能从析构函数中抛出异常,以防从析构函数中抛出多个异常。
在 Effective C++ 中,Scott Meyers 使用了一个 vector 示例,其中第一个元素在销毁期间抛出异常,然后第二个元素抛出 - 导致 C++ 出现问题(无法处理多个异常)。
当然这种情况( vector 操作元素和元素抛出异常)也可能发生在复制构造函数实现深度复制期间?
编辑:
我们是说 dtor 调用底层 dtor 的递归性质与复制构造函数不同吗?
<分区>
似乎您不能从析构函数中抛出异常,以防从析构函数中抛出多个异常。
在 Effective C++ 中,Scott Meyers 使用了一个 vector 示例,其中第一个元素在销毁期间抛出异常,然后第二个元素抛出 - 导致 C++ 出现问题(无法处理多个异常)。
当然这种情况( vector 操作元素和元素抛出异常)也可能发生在复制构造函数实现深度复制期间?
编辑:
我们是说 dtor 调用底层 dtor 的递归性质与复制构造函数不同吗?
最佳答案
异常不应该从析构函数中抛出,因为当您抛出异常时,编译器将清除范围内的变量,从而调用它们的析构函数。如果那些也抛出异常,你的状态就会很糟糕。
关于c++ - 为什么不能从析构函数中抛出异常但可以从复制构造函数中抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345801/