【发布时间】:2016-08-19 14:25:38
【问题描述】:
根据C++参考p>
exit正常终止进程,执行定期清理 用于终止程序。正常程序终止执行以下操作(以相同的顺序): 与具有线程存储的当前线程关联的对象 持续时间被销毁(仅限 C++11)。具有静态存储的对象 持续时间被破坏(C ++)并且用atexit注册的函数是 叫。所有 C 流(使用 中的函数打开)都已关闭 (如果缓冲,则刷新),并且使用 tmpfile 创建的所有文件都是 删除。控制权返回到宿主环境。
请注意,具有自动存储功能的对象不会通过调用来销毁 退出 (C++)。
据我所知,当进程终止时,进程使用的所有存储都被回收,那么自动存储的对象不被销毁有什么影响?
【问题讨论】:
-
如果在函数调用
exit()时自动范围保护变量正在锁定互斥锁,则该互斥锁将不会被解锁,并且如果执行了任何终止清理(对于线程/静态变量, atexit...) 想要锁定相同的互斥锁,它可能会死锁并阻止干净关闭。 -
标准是说 C++ 运行时所做的一切都被撤消了。它没有说明您的应用程序。它不能确保您的应用程序自行清理。