exit()和析构函数的关系
exit( )函数的作用是删除所有的静态对象,刷新缓冲,关闭所有的I/O通道,然后结束程序
- 如果对象是局部对象,exit()函数不会调用对象的析构函数,因为不存在栈空间回收问题。
- 如果对象是全局变量,会调用对象的析构函数
- 如果是动态建立的对象,除非手动删除,否则不会调用对象的析构函数
现在思考一下,如果在C++里调用了exit() , 内存中的对象没调用析构函数就退出程序了,会不会导致内存泄漏?
查阅资料,其实是不会的。
原因:
转自:https://www.zhihu.com/question/20765487/answer/24430299
1. 进程退出时,操作系统会回收该进程所占用的所有资源。所以不需要担心内存泄漏。
2. exit()函数的也并不是完全不调用析构函数。参考ISO C++ 2003标准:
<img src="https://i-blog.csdnimg.cn/blog_migrate/fd2560fe940f2bbecda90697b631b62b.png" data-rawwidth="676" data-rawheight="790" class="origin_image zh-lightbox-thumb" width="676" data-original="https://pic1.zhimg.com/d8f62b1cf590f98c39cb531a5ac18bb0_r.jpg">
![](https://i-blog.csdnimg.cn/blog_migrate/fd2560fe940f2bbecda90697b631b62b.png)
static对象是会被析构的,auto对象不会析构。