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

时间:2011-08-14 02:51:57

标签: c++ destructor exit

  

可能重复:
  Will exit() or an exception prevent an end-of-scope destructor from being called?

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

2 个答案:

答案 0 :(得分:37)

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

C ++98§18.3/ 8讨论了这一点。

基本上,当调用exit时,将销毁静态对象,执行atexit个处理程序,刷新和关闭打开的C流,并删除tmpfile创建的文件。本地自动对象不会被破坏。即,没有堆栈展开。

调用abort让更少的事情发生:没有任何清理。

答案 1 :(得分:5)

如果你的操作系统是合理的(Unix,Linux或最近的Windows),调用exit()会告诉内核取消分配所有进程的内存。堆栈不需要解开;它将永远不复存在。