e.J*_*mes 6 c++ destructor exception
我看到一些带有析构函数的C++类定义如下:
class someClass
{
public:
someClass();
~someClass() throw();
};
Run Code Online (Sandbox Code Playgroud)
这是一个好主意吗?
我很清楚析构函数应该永远不会抛出异常,但这实际上会阻止我在析构函数中抛出异常吗?我不是100%肯定它保证什么.
参考:最近这个问题
它不会阻止您从析构函数中抛出异常.编译器仍然允许你这样做.不同之处在于,如果您允许异常从该析构函数中逃脱,您的程序将立即调用unexpected
.该函数调用unexpected_handler
默认值为的任何点terminate
.因此,除非你做一些事情来处理意外的异常,否则你的程序会终止,这并不是一个坏主意.毕竟,如果异常真的是意料之外的话,那么你的程序无论如何都无法处理它.
这对于析构函数来说并不是特别之处; 相同的规则适用于所有方法的异常规范.