異常的建構函式 二階構造模式

2021-08-17 18:38:46 字數 2701 閱讀 8816

目錄

異常的建構函式

構造與析構中的異常

二階構造模式 

面試題 11. 如何判斷建構函式的執行結果? 

2. 在建構函式中執行return語句會發生什麼? 

3. 建構函式執行結束是否意味著物件構造成功?

① 沒有辦法直接判斷建構函式的執行結果,不過可以設定乙個狀態變數放在建構函式末尾

② return語句執行後,建構函式立即返回(return前面初始化成功,後面部分未初始化為隨機值)

③ 建構函式執行結束,且並不意味著物件構造成功

建構函式 ,只提供自動初始化成員變數的機會 ,不能保證初始化邏輯—定成功 ,執行return語句後建構函式立即結束

建構函式能決定的只是物件的初始狀態,而不是物件的誕生!!!

半成品物件的概念 :初始化操作不能按照預期完成而得到的物件 ,半成品物件是合法的c++物件,也是bug的重要**

#include class test  

int geti()

int getj()

int status()

};

int main()

return 0;

}

面試題 2如果建構函式中丟擲異常會發生什麼情況?析構丟擲異常呢?

構造過程立即停止,當前物件無法生成,析構函式不會被呼叫,物件所占用的空間立即收回

避免在析構函式中丟擲異常, 析構函式的異常將導致物件所使用的資源無法完全釋放

工程專案中的建議避免在建構函式中丟擲異常 ,當建構函式可能產生異常時,使用二階構造模式 (二階構造模式是唐老師總結的一種可行的設計模式,非常實用)

使用valgrind檢測發現沒有產生記憶體洩漏 

工程開發中的構造過程可分為 

-資源無關的初始化操作 :不可能出現異常情況的操作 

-需要使用系統資源的操作 :可能出現異常情況,如:記憶體申請,訪問檔案 ...

二階構造示例

#include class twophasecons  

bool construct()

public:

static twophasecons* newinstance () ; // 物件建立函式

程式設計實驗 : 陣列類intarray.h

二階構造模式

我們在建立物件的時候,需要呼叫建構函式,對物件做初始化,但是建構函式是沒有返回值的,無法判斷建構函式的執行結果。如果建構函式執行過程中,發生了異常,導致函式提前返回了,那麼這種情況下,我們建立的物件會處於什麼狀態。1.建構函式確定對物件做初始狀態,物件的建立與建構函式無關,也就是說儲存物件的那片記憶...

二階構造模式

模式 方法。設計模式,就是設計方法。前人證明了的行之有效的方法。建構函式 1.關於建構函式 類的建構函式用於物件的初始化。建構函式與類同名並且沒有返回值。建構函式在物件定義時自動被呼叫。問題 1.如何判斷建構函式的執行結果?2.在建構函式中執行return語句會發生什麼?3.建構函式執行結束是否意味...

二階構造模式

建構函式只決定物件的初始化狀態,不可以決定物件是否建立。如果在建構函式中使用return,則將構造出乙個半成品物件。半成品物件 建構函式沒有全部執行。二階構造 分兩步來構造乙個物件。第一步 與系統資源無關的初始化操作。不會出現異常操作的 include class twophasecons bool...