exit()和析构函数的关系

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">
static对象是会被析构的,auto对象不会析构。



  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值