std::terminate()是否触发堆栈展开



我一直在尝试实现Exception类,对于程序终止,我决定使用std::terminate(),但我不确定std::terminate()是否触发堆栈展开过程。

例如,如果我编译并运行以下代码:

struct Test {
Test() {
std::cout << "Constructedn";
}
~Test() {
std::cout << "Destructedn";
}
};
int main() {
Test t;
std::terminate();
return 0;
}

它将输出以下内容:

Constructed
terminate called without an active exception

而且似乎没有调用析构函数。

std::terminate()的标准处理程序直接调用std::abort

如果你看一下这里,你会发现std::abort()没有调用任何析构函数。

不调用具有自动、线程本地(自C++11以来(和静态存储持续时间的变量的析构函数。用std::atexit((和std::at_quick_exit注册的函数(由于C++11(也不会被调用。打开的资源(如文件(是否关闭是由实现定义的。实现定义的状态返回到主机环境,指示执行不成功。

最新更新