提问者:小点点

调用exit()时析构函数是否运行? [副本]


可能的重复:
exit()或异常会阻止调用作用域结束析构函数吗?

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


共2个答案

匿名用户

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

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

本质上,当调用exit时,静态对象将被销毁,atexit处理程序将被执行,打开的C流将被刷新并关闭,由tmpfile创建的文件将被删除。 不会销毁本地自动对象。 即不放卷。

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

匿名用户

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