C C 的二階構造模式(避免構造bug)

2021-09-13 10:55:47 字數 1148 閱讀 4957

野指標物件構造未成功(在建構函式**現了異常)

只提供自動初始化成員變數的機會

不能保證初始化邏輯一定成功

執行return語句後建構函式立即結束

結論:建構函式能決定的只是物件的初始狀態,而不是物件的誕生!!!,會出現半成品物件

半成品物件的概念:

那麼我們該如何避免這樣的bug呢?下面就引出二階構造的含義:

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

不可能出現異常情況的操作

資源無關的初始化操作

需要使用系統資源的操作

可能出現異常情況,如:記憶體申請,訪問檔案

二階構造大體流程:

//第一階段建構函式

bool construct()

//第二階段建構函式};

intmain()

twophasecons * twophasecons:

:newinstance()

return ret;

}執行結果:

obj=012c7460

第一階段建構函式與第二階段建構函式放到private裡面了,外部無法呼叫。

但是在public中,定義的是static 型的newinstance函式,返回twophasecons型別的物件,那麼通過它就可以呼叫private裡面的建構函式。例如在newinstance函式裡可以有如下**:twophasecons* ret = new twophasecons();,因為處於newinstance內部,所以它可以呼叫建構函式。

同時我們也可以看出,用了二階構造模式後,物件只能在堆空間上進行構造而不能在棧空間上構造這樣好麼?答案是肯定的,因為工程上的物件往往是巨大的,一般都會放到堆空間上進行構造。

二階構造模式

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

二階構造模式

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

二階構造模式

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