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



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

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

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

C++98§18.3/8对此进行了讨论。

本质上,当exit被调用时,静态对象被销毁,atexit处理程序被执行,打开的C流被刷新和关闭,tmpfile创建的文件被删除。本地自动对象不会被销毁。也就是说,没有堆叠展开。

调用abort会让更少的事情发生:不进行任何清理。

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

相关内容

  • 没有找到相关文章

最新更新