建構函式存在的問題:
a、建構函式只提供自動初始化成員變數的機會
b、不能保證初始化邏輯一定成功,如申請系統資源可能失敗
c、執行return語句後建構函式立即結束
建構函式建立的物件可能是半成品物件,半成品物件是合法的物件,但是程式bug的**之一。因此實際工程開發過程中使用二階構造模式。
1、二階構造模式簡介
由於建構函式存在的潛在問題,實際工程開發中類物件的構造過程如下:
a、資源無關的初始化操作
資源無關的初始化操作一般不會出現異常的情況
b、系統資源相關的操作
與系統資源有關的操作如堆空間申請,檔案訪問可能會失敗。
二階構造模式的流程如下:
c++語言學習(六)——二階構造模式
二階構造模式能夠確保建立的物件都是完整初始化的。由於工程實踐中類物件占用的儲存空間比較大,一般需要分配在堆空間,因此二階構造模式構造物件的方式捨棄了建構函式中將物件分配在棧和全域性資料區的情況,只保留建立在堆空間的物件的構造。
2、二階構造模式示例
二階構造模式示例**:
#include
class
twophasecons
bool
construct()
// 第二階段建構函式
public
:static twophasecons*
newinstance()
;// 物件建立函式};
twophasecons* twophasecons::
newinstance()
return ret;
}int
main()
3、二階建構函式應用
#include
using
namespace std;
class
intarray
intarray
(const intarray& obj)
;bool
construct()
}else
return ret;
}public
:static intarray*
newinstance
(int length)
return ret;
}int
length()
bool
get(
int index,
int& value)
return ret;
}bool
set(
int index ,
int value)
return ret;}~
intarray()
private
:int m_length;
int* m_pointer;};
intmain
(int argc,
char
*ar**)
C 語言學習(五) 二階構造模式
建構函式存在問題 a 建構函式只提供自動初始化成員變數的機會 b 不能保證初始化邏輯一定成功,如申請系統資源可能失敗 c 執行 return 語句後建構函式立即結束 建構函式建立的物件可能是半成品物件,半成品物件是合法的物件,但是是程式bug的 之一。因此實際工程開發過程中使用二階構造模式。由於建構...
二階構造模式
我們在建立物件的時候,需要呼叫建構函式,對物件做初始化,但是建構函式是沒有返回值的,無法判斷建構函式的執行結果。如果建構函式執行過程中,發生了異常,導致函式提前返回了,那麼這種情況下,我們建立的物件會處於什麼狀態。1.建構函式確定對物件做初始狀態,物件的建立與建構函式無關,也就是說儲存物件的那片記憶...
二階構造模式
模式 方法。設計模式,就是設計方法。前人證明了的行之有效的方法。建構函式 1.關於建構函式 類的建構函式用於物件的初始化。建構函式與類同名並且沒有返回值。建構函式在物件定義時自動被呼叫。問題 1.如何判斷建構函式的執行結果?2.在建構函式中執行return語句會發生什麼?3.建構函式執行結束是否意味...