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更能避免內存洩漏。