effective c 別讓異常逃離析構函式

2021-07-05 07:18:58 字數 625 閱讀 6847

c++並不禁止析構函式吐出異常,但是它不鼓勵這樣做

class widget;};

vector

vec;

當vec被銷毀時,他有責任銷毀其內含的所有widget

如果vec內含10個widget,在析構第乙個元素期間,有個異常被丟擲,其他9個widget還是應該被銷毀,否則他們儲存的資源都會發生洩漏

當碰到析構函式需要丟擲異常時的解決方法:

(關於資料庫操作的類)

class dbcon

catch

};private:

dbconnection db;

};

class dbcon

catch

};private:

dbconnection db;

};

更好的解決方法是重新設計介面

class dbcon

~dbcon()

catch}};

private:

dbconnection db;

bool closed;

};

effective c 關於異常安全

假設有個class用來表現夾帶背景圖案的 gui選單,用於多執行緒,有個互斥器作為併發控制 class prettymenu void prettymenu changebackground std istream imgsrc 帶有異常安全性的函式會 1 不洩露任何資源 一旦 new image ...

別讓異常逃離析構函式

c 中並不禁止析構函式吐出異常,但是並鼓勵這樣做,看下面 當vector v被銷毀時,它有責任將其中所有的widgets銷毀並且 記憶體,而在析構第乙個元素時候,析構函式會丟擲異常,但是第二個vector的時候也會丟擲異常,這對於c 來說太多了。這會導致程式不明確的行為。c 不喜歡析構函式吐出異常。...

effect C 別讓異常逃離析構函式

class widget void dosomething 當vector v被銷毀,它有責任銷毀內含的所有widgets。假設v內含十個widgets,而在析構第乙個元素期間,有個異常被丟擲。其他九個widgets還是應該被銷毀 否則它們儲存的任何資源都會發生洩露 因為v應該呼叫它們它們各個析構函...