複製控制成員總結

2021-06-03 04:38:56 字數 844 閱讀 8088

1.複製控制成員是指:複製建構函式、賦值操作符函式、析構函式

2.關於複製建構函式,見:複製建構函式總結

3.如果沒有自己的賦值操作符函式,編譯器會提供乙個。

賦值操作符也是依次複製每個非static成員,也是淺層複製。

賦值操作符與複製構造的區別,只是不用為物件開闢新空間。

4.析構物件的順序,是建立物件的逆序,也即宣告次序的逆序

例:

class a

/*複製建構函式

*orig.ptr:取指標orig.ptr指向的內容

ptr(new int(*orig.ptr)):建立乙個int,int的內容與*orig.ptr相同,ptr指向該int*/

a(const a &orig):ptr(new int(*orig.ptr)),val(orig.val){}

/*賦值操作符不需要開闢空間*/

a& operator=(const a &orig)

//析構函式

~a()

};

需要注意的是,在本例中,this物件可以訪問orig物件的私有成員。

對於私有的定義是這樣的:只允許類的建立者(在這裡是this)和該類的成員函式可以訪問

我理解的可以訪問是指可以訪問建立者的私有成員。

為什麼在本例中this物件可以訪問orig物件的私有成員?求解釋

8.如果類中有指標成員,複製控制函式一定要自己寫。

有時候,複製控制的應用不是很明顯,容易被忽略。

所以發現類中有指標成員時,一定要仔細分析類的使用,不能忽視任意一處可能的複製控制的使用

最保險的方法就是,只要看到類中有指標成員,就自己寫複製控制

建構函式和複製控制成員

建構函式和複製控制成員不能繼承 即建構函式,析構函式,複製建構函式,賦值操作符 每個類定義自己的建構函式和複製控制成員。像任何類一樣,如果類不定義自己的預設建構函式和複製控制成員,就將使用合成版本。派生類建構函式 派生類的建構函式受繼承關係的影響,每個派生類建構函式除了初始化自己的資料成員之外,還要...

C 編譯器合成預設建構函式和複製控制成員的條件

參考自 深入理解c 物件模型 c 新手一般有兩個常見的誤解 任何class如果沒有定義default constructor,就會被合成乙個出來.編譯器合成出來的default constructor會明確設定class 內每乙個data member的預設值.現在主要解釋第一條為什麼是錯誤的,根據...

C 理解拷貝控制成員和建構函式

首先通過例子分析 建構函式,拷貝建構函式,拷貝賦值運算子,析構函式 何時呼叫?定義類test class test 拷貝建構函式 test operator const test 拷貝賦值運算子 test private inline test test inline test test 測試函式f...