可能重复:
exit((或异常会阻止调用作用域结束析构函数吗?
在C++中,当应用程序调用exit(3(时,堆栈上的析构函数是否应该运行以展开堆栈?
否,大多数析构函数都不在exit()
上运行
C++98§18.3/8对此进行了讨论。
本质上,当exit
被调用时,静态对象被销毁,atexit
处理程序被执行,打开的C流被刷新和关闭,tmpfile
创建的文件被删除。本地自动对象不会被销毁。也就是说,没有堆叠展开。
调用abort
会让更少的事情发生:不进行任何清理。
如果您的操作系统合理(Unix、Linux或最新的Windows(,调用exit((将告诉内核取消分配所有进程的内存。堆栈不需要展开;它将不复存在。