Ass*_*vie 10 c++ winapi visual-c++
有多种退出流程的方法:
例如:ExitProcess,ExitThread(来自主线程),退出,中止,从main返回,终止.
我想知道每个方法对静态/全局/自动对象销毁的影响.
例如,我有一个项目在调用ExitProcess时崩溃(可能是由于一些释放错误),但是在调用exit()时却没有.(偶然地与这个问题有关).
所以基本上我想知道在哪种情况下发生上述对象的释放,以及以什么顺序(对于VC++).
j_r*_*ker 14
简而言之:唯一完全安全的做法是允许main()或者你的线程功能return.
C++标准保证(3.6.3/1,18.3)在调用时将调用全局对象(包括静态对象)的exit()析构函数,但是它明确指出在这种情况下不会调用局部变量的析构函数. 将调用与注册的任何功能,并且还冲刷和然后将关闭所有打开的标准输入输出流(包括至少,,).exit()atexit()stdinstdoutstderr
呼叫abort()保证不会调用本地或全局析构函数.它也不会调用注册的函数atexit()或刷新stdio流.
调用任何Win32原语,例如ExitProcess()或ExitThread()肯定不会为局部变量调用析构函数,并且几乎肯定不会为全局对象或注册的任何函数调用任何析构函数atexit(). 不建议直接在C++程序中调用这些函数 - 基本上,这些Win32函数和C++运行时库对彼此一无所知.事实上,即使是MSDN文档也ExitThread()建议C++程序应该从线程函数返回而不是调用ExitThread().
(理论上,运行时库可能专门用于ExitProcess()调用全局对象析构函数 - 这可以通过始终加载一个特定的DLL来完成,该入口点函数将执行这些调用,因为ExitProcess()它将为每个加载的DLL调用入口点函数有DLL_PROCESS_DETACH- 但据我所知,没有实现这一点.)
| 归档时间: |
|
| 查看次数: |
7290 次 |
| 最近记录: |