可能重复:
Will exit() or an exception prevent an end-of-scope destructor from being called?
在C ++中,当应用程序调用exit(3)时,是否应该运行堆栈上的析构函数来展开堆栈?
答案 0 :(得分:37)
不,大多数析构函数都不会在exit()
上运行。
C ++98§18.3/ 8讨论了这一点。
基本上,当调用exit
时,将销毁静态对象,执行atexit
个处理程序,刷新和关闭打开的C流,并删除tmpfile
创建的文件。本地自动对象不会被破坏。即,没有堆栈展开。
调用abort
让更少的事情发生:没有任何清理。
答案 1 :(得分:5)
如果你的操作系统是合理的(Unix,Linux或最近的Windows),调用exit()会告诉内核取消分配所有进程的内存。堆栈不需要解开;它将永远不复存在。