c++ - 为什么不能从析构函数中抛出异常但可以从复制构造函数中抛出异常?

标签 c++ destructor copy-constructor

<分区>

似乎您不能从析构函数中抛出异常,以防从析构函数中抛出多个异常。

在 Effective C++ 中,Scott Meyers 使用了一个 vector 示例,其中第一个元素在销毁期间抛出异常,然后第二个元素抛出 - 导致 C++ 出现问题(无法处理多个异常)。

当然这种情况( vector 操作元素和元素抛出异常)也可能发生在复制构造函数实现深度复制期间?

编辑:

我们是说 dtor 调用底层 dtor 的递归性质与复制构造函数不同吗?

最佳答案

异常不应该从析构函数中抛出,因为当您抛出异常时,编译器将清除范围内的变量,从而调用它们的析构函数。如果那些也抛出异常,你的状态就会很糟糕。

关于c++ - 为什么不能从析构函数中抛出异常但可以从复制构造函数中抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345801/

相关文章:

c++ - 从 C 源文件调用 C++ 源文件中定义的全局函数

c++ - 析构函数是否总是被调用删除运算符,即使它已过载?

c++ - 为什么调用 dtor(使用 annoymous/lambda func)

c++ - 在从 POD 结构继承的类中定义复制构造函数

c++ - 返回但不使用类型的 C++ 函数是否需要 #include 该类型?

c++ - 在 Qt 的外部类中使用 OpenGL 上下文

c++ - 使用此函数查找数组的长度

c++ - 我应该为QWidget的派生定义析构函数吗

c++ - 带有复制构造函数的多态性

c++ - 复制构造函数在调用时抛出 std::bad_alloc