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