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

e.J*_*mes 6 c++ destructor exception

我看到一些带有析构函数的C++类定义如下:

class someClass
{
    public:
        someClass();
        ~someClass() throw();
};
Run Code Online (Sandbox Code Playgroud)

这是一个好主意吗?

我很清楚析构函数应该永远不会抛出异常,但这实际上会阻止我在析构函数中抛出异常吗?我不是100%肯定它保证什么.

参考:最近这个问题

Rob*_*edy 7

它不会阻止您从析构函数中抛出异常.编译器仍然允许你这样做.不同之处在于,如果您允许异常从该析构函数中逃脱,您的程序将立即调用unexpected.该函数调用unexpected_handler默认值为的任何点terminate.因此,除非你做一些事情来处理意外的异常,否则你的程序会终止,这并不是一个坏主意.毕竟,如果异常真的是意料之外的话,那么你的程序无论如何都无法处理它.

这对于析构函数来说并不是特别之处; 相同的规则适用于所有方法的异常规范.