我试图理解为什么从析构函数中引发异常会导致程序崩溃。 正如我发现的两个对象的多个示例引发多个异常,而编译器无法处理多个异常,但就我而言,析构函数中仅抛出一个异常。为什么我的程序仍然崩溃?
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '****',
'USER': '****',
'PASSWORD': '****',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
}
答案 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的那些函数以及析构函数,默认特殊成员函数和释放函数)
强调是我的。