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