c++ - 我应该将 throw() 添加到我的 C++ 析构函数的声明中吗?

标签 c++ exception destructor

我见过一些 C++ 类的析构函数定义如下:

class someClass
{
    public:
        someClass();
        ~someClass() throw();
};

这是个好主意吗?

我很清楚析构函数不应该抛出异常,但这真的会阻止我在析构函数中抛出异常吗?我不是 100% 确定它能保证什么。

引用:this recent question

最佳答案

它不会阻止您从析构函数中抛出异常。编译器仍然会让你这样做。不同之处在于,如果您确实允许异常从该析构函数中逃逸,您的程序将立即调用 unexpected。该函数调用 unexpected_handler 指向的任何内容,默认情况下为 terminate。因此,除非您采取措施来处理意外异常,否则您的程序将终止,这并不是一个坏主意。毕竟,如果异常确实是意外的,那么无论如何您的程序都无法处理它。

这不是析构函数的特殊之处;相同的规则适用于所有方法的异常规范。

关于c++ - 我应该将 throw() 添加到我的 C++ 析构函数的声明中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/456738/

相关文章:

c++ - 在不实例化的情况下计算结构成员的偏移量

C++ 抽象类不能有带有该类参数的方法

c++ - CMake FetchContent 不复制库

c++ - 一定时间后中断功能。 (C++)

c++ - 如何从复制赋值运算符调用复制构造函数?

C++:析构函数需要 "if"语句吗?

c++ - 当使用 pcl.1.8.0 显示一些示例时,但在运行 "triangulationGreedyProjection "的代码时出错并在 “Memory.h” 崩溃

exception - "should"时未引发 Ada CONSTRAINT_ERROR

android - 文本到语音 - 空指针异常

C++:为什么要在这里调用析构函数?