c ++析构函数抛出单个对象异常

时间:2018-08-17 14:01:59

标签: c++

我试图理解为什么从析构函数中引发异常会导致程序崩溃。 正如我发现的两个对象的多个示例引发多个异常,而编译器无法处理多个异常,但就我而言,析构函数中仅抛出一个异常。为什么我的程序仍然崩溃?

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '****',
        'USER': '****',
        'PASSWORD': '****',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}

2 个答案:

答案 0 :(得分:6)

MingW g ++编译器的解释:

[P:\temp]
> g++ foo.cpp
foo.cpp: In destructor 'MyClass::~MyClass()':
foo.cpp:14:15: warning: throw will always call terminate() [-Wterminate]
         throw "invalid";
               ^~~~~~~~~
foo.cpp:14:15: note: in C++11 destructors default to noexcept

要真正让它抛出,您可以执行以下操作:

~MyClass() noexcept(false){

答案 1 :(得分:1)

由于C ++ 11析构函数被隐式声明为noexcept documentation

  

其他所有非抛出函数(具有noexcept说明符且表达式为true的那些函数以及析构函数,默认特殊成员函数和释放函数)

强调是我的。