拷貝建構函式和賦值表示式

2021-09-08 16:31:06 字數 770 閱讀 8238

1、

用乙個已存在的物件去構造乙個不存在的物件(

構造之前不存在

),就是拷貝構造。用乙個已存在的物件去覆蓋另乙個已存在的物件,

就是賦值運算。

string(const char *str = null);//

普通建構函式

string(const string &other); //

拷貝建構函式

拷貝建構函式將在物件傳值,返回值,丟擲異常中被呼叫。

2、「引用」不可能是

null

,而「指標」可以為

null

。注意函式

strlen

返回的是有效字串長度,不包含結束符『

\0』。函式

strcpy

則連『\0

』一起複製。

3、應該為所有包含動態分配成員的類都提供拷貝建構函式,析構函式,賦值運算子。

4、拷貝建構函式與賦值運算子

a b=a;   //

拷貝構造函式呼叫

a b(a);   //

拷貝構造函式呼叫

b =a;   //

賦值運算子呼叫

5、對於乙個類

x, 如果乙個建構函式的第乙個引數是下列之一

:a) x&

b) const x&

c) volatile x&

d) const volatile x&

且沒有其他引數或其他引數都有預設值,那麼這個函式是拷貝建構函式。

原文:

拷貝建構函式和賦值構造

為什麼空類可以建立物件呢?複製建構函式的引數可以是 const 引用,也可以是非 const 引用。一般使用前者,這樣既能以常量物件 初始化後值不能改變的物件 作為引數,也能以非常量物件作為引數去初始化其他物件。乙個類中寫兩個複製建構函式,乙個的引數是 const 引用,另乙個的引數是非 const...

拷貝建構函式和賦值建構函式

class cmystring 賦值建構函式 cmystring cmystring operator const cmystring str 新分配記憶體,將str的m pdata記憶體拷貝到m pdata中 m pdata new char strlen str.m pdata 1 strcpy...

拷貝建構函式和賦值建構函式

拷貝構造是確確實實構造乙個新的物件,並給新物件的私有成員賦上引數物件的私有成員的值,新構造的物件和引數物件位址是不一樣的,所以如果該類中有乙個私有成員是指向堆中某一塊記憶體,如果僅僅對該私有成員進行淺拷貝,那麼會出現多個指標指向堆中同一塊記憶體,這是會出現問題,如果那塊記憶體被釋放了,就會出現其他指...