C++中的return、exit和abort

1.exit();
----------
在調用時,會做大部分清理工作,但是決不會銷毀局部對象,因為沒有stack unwinding.
會進行的清理工作包括:
1)銷毀所有static和global對象;
2)清空所有緩衝區;
3)關閉所有I/O通道。
終止前會調用經由 atexit()登錄的函數,atexit如果拋出異常,則調用terminate()。
在調用的時候,對象還是不會被正確析構的,所以在exit前,一定要釋放該釋
放的資源,特別是內核駐留的像共享內存之類。
-----------------------------------------------------------------------------
2.abort();
-----------
調用時,不進行任何清理工作,直接終止程序。
----------------------------------------------------------------
3)return;
------------
調用時,進行stack unwinding調用局部對象析構函數,清理局部對象。如果在main中,則之後再交由系統調用exit();
return返回,可析構。
main或函數中的局部變量,尤其要注意局部對象,如不析構可能造成內存洩漏。
-----------------------------------------------------------------------------------
exit返回不析構main或函數中的局部變量,但執行收工函數,故可析構全局變量(對象)。

abort不析構main或函數中的局部變量,也不執行收工函數,故全局和局部對象都不析構。

所以,用return更能避免內存洩漏。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值