调用exit()时是否运行析构函数

Are destructors run when calling exit()?

本文关键字:是否 运行 析构函数 exit 调用      更新时间:2023-10-16

可能重复:
exit((或异常会阻止调用作用域结束析构函数吗?

在C++中,当应用程序调用exit(3(时,堆栈上的析构函数是否应该运行以展开堆栈?

否,大多数析构函数都不在exit()上运行

C++98§18.3/8对此进行了讨论。

本质上,当exit被调用时,静态对象被销毁,atexit处理程序被执行,打开的C流被刷新和关闭,tmpfile创建的文件被删除。本地自动对象不会被销毁。也就是说,没有堆叠展开。

调用abort会让更少的事情发生:不进行任何清理。

如果您的操作系统合理(Unix、Linux或最新的Windows(,调用exit((将告诉内核取消分配所有进程的内存。堆栈不需要展开;它将不复存在。