我见过一些带有析构函数的C ++类,定义如下:
class someClass
{
public:
someClass();
~someClass() throw();
};
这是个好主意吗?
我很清楚析构函数应该永远不会抛出异常,但这实际上会阻止我在析构函数中抛出异常吗?我不能100%确定它的保证。
答案 0 :(得分:7)
它不会阻止您从析构函数中抛出异常。编译器仍然允许你这样做。不同之处在于如果允许异常从析构函数中逃脱,程序将立即调用unexpected
。该函数调用unexpected_handler
个点,默认为terminate
。因此,除非你做一些事情来处理意外的异常,否则你的程序会终止,这并不是一个坏主意。毕竟,如果异常真的是意料之外的话,那么你的程序无论如何都无法处理它。
这对于析构函数来说并不是特别之处;相同的规则适用于所有方法的异常规范。
答案 1 :(得分:3)
这不是一个糟糕的主意。如果您在没有异常传播的情况下投掷dtor,您将立即中止,这会让您知道您忘记制作一个真正的非投掷dtor。
如果另一方面你抛弃了抛出规范,那么当实际抛出异常时,你只会知道你的糟糕的dtor实现。