Wil*_*mKF 28 c++ destructor exit
可能重复:
exit()或异常会阻止调用范围结构析构函数吗?
在C++中,当应用程序调用exit(3)时,堆栈上的析构函数应该运行以展开堆栈吗?
Che*_*Alf 41
不,大多数析构函数都没有运行exit().
C++98§18.3/ 8讨论了这一点.
实质上,当exit被调用时,静态对象被销毁,atexit处理程序被执行,打开的C流被刷新和关闭,并且创建的文件tmpfile被删除.本地自动对象不会被破坏.即,没有堆栈放松.
呼叫abort让更少的事情发生:没有任何清理.
如果您的操作系统是合理的(Unix,Linux或最近的Windows),调用exit()会告诉内核取消分配所有进程的内存.堆栈不需要解开; 它将永远不复存在.