C 中建構函式和析構函式可以丟擲異常嗎

2021-08-07 11:46:10 字數 626 閱讀 4569

c++中建構函式和析構函式可以丟擲異常嗎?

一.  析構函式

參照《effective c++》中條款08:別讓異常逃離析構函式。

總結如下:

1. 不要在析構函式中丟擲異常!雖然c++並不禁止析構函式丟擲異常,但這樣會導致程式過早結束或出現不明確的行為。

2. 如果某個操作可能會丟擲異常,class應提供乙個普通函式(而非析構函式),來執行該操作。目的是給客戶乙個處理錯誤的機會。

3. 如果析構函式中異常非拋不可,那就用try catch來將異常吞下,但這樣方法並不好,我們提倡有錯早些報出來。

二.  建構函式

總結如下:

1. 建構函式中丟擲異常,會導致析構函式不能被呼叫,但物件本身已申請到的記憶體資源會被系統釋放(已申請到資源的內部成員變數會被系統依次逆序呼叫其析構函式)。

2. 因為析構函式不能被呼叫,所以可能會造成記憶體洩露或系統資源未被釋放。

3. 建構函式中可以丟擲異常,但必須保證在建構函式丟擲異常之前,把系統資源釋放掉,防止記憶體洩露。(如何保證???使用auto_ptr???)

最後總結如下:

1. 建構函式中盡量不要丟擲異常(可以),能避免的就避免,如果必須,要考慮不要記憶體洩露!

2. 不要在析構函式中丟擲異常!

C 中建構函式和析構函式可以丟擲異常嗎?

一.建構函式 1.建構函式中丟擲異常,會導致析構函式不能被呼叫,但物件本身已申請到的記憶體資源會被系統釋放 已申請到資源的內部成員變數會被系統依次逆序呼叫其析構函式 2.因為析構函式不能被呼叫,所以可能會造成記憶體洩露或系統資源未被釋放。3.建構函式中可以丟擲異常,但必須保證在建構函式丟擲異常之前,...

建構函式和析構函式中丟擲異常

不會造成記憶體洩漏 1 new乙個物件有兩個過程 a.向系統申請記憶體空間 b.在申請的記憶體空間上執行建構函式,初始化物件。2 內部物件構造先於物件本身。3 物件在建構函式丟擲異常後,系統會負責清理構造物件時申請的記憶體,但不會呼叫物件析構函式。也就是說構造物件的記憶體會被釋放掉,已經完成例項化的...

C 中建構函式和析構函式丟擲異常問題

一.丟擲異常 1.1 丟擲異常 也稱為拋棄異常 即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。該語句的格式為 throw 表示式 如果在try語句塊的程式段中 包括在其中呼叫的函式 發現了異常,且拋棄了該異常,則這個異常就可以被try語句塊後的某個catc...