return exit和abort的區別

2021-07-24 17:30:23 字數 816 閱讀 9136

exit():

在呼叫時,會做大部分清理工作,但是決不會銷毀區域性物件,因為沒有stack unwinding。

會進行的清理工作包括:銷毀所有static和global物件,清空所有緩衝區,關閉所有i/o通道。終止前會呼叫經由atexit()登入的函式,atexit如果丟擲異常,則呼叫terminate()。

abort():

呼叫時,不進行任何清理工作。直接終止程式。

retrun:

呼叫時,進行stack unwinding,呼叫區域性物件析構函式,清理區域性物件。如果在main中,則之後再交由系統呼叫exit()。

return返回,可析構 main或函式中的區域性變數,尤其要注意區域性物件,如不析構可能造成 記憶體洩露。

exit返回不析構main或函式中的區域性變數,但執行收工函式, 故可析構全域性變數(物件)。

abort不析構main或函式中的區域性變數,也不 執行收工函式,故全域性和區域性物件都不析構。 

所以,用return更能避免記憶體洩露,在c++中用abort和exit都不是好 習慣

對於exit函式,可以利用atexit函式為exit事件"掛接"另外的函式,這種"掛接"有點類似windows程式設計中的"鉤子"(hook)。程式輸出 "atexit掛接的函式"後即終止,即便是不呼叫exit函式,當程式本身退出時,atexit掛接的函式仍然會被執行。atexit可以被多次執行,並掛接多個函式,這些函式的執行順序為後掛接的先執行。在visual c++中,如果以abort函式(此函式不帶引數,原型為void abort(void))終止程式,則會在debug模式執行時彈出錯誤提示的對話方塊。linux中abort()會產生core   dump。

和 區別和聯絡, 和 區別和聯絡

和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...

rpx和樣式和class和flex

5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...

if和switch和for語句

if和switch很像。具體什麼場景下,應用那個語句呢?如果判斷的具體數值不多,而是符合byte,short,int,char,字串。這五種型別。雖然兩個語句都可以使用,建議使用switch語句,因為效率稍高。其他情況,對區間判斷,對結果為boolean型別判斷,使用if,if的使用範圍更廣。whi...