拷貝建構函式發生在物件還沒有建立,需要建立時如:
myclass
obj1(1);
myclass
obj3 = obj1;
賦值操作符過載僅發生在物件已經執行過建構函式,即已經建立的情況下
如:myclass
obj1(1);
myclass
obj3;
obj3 = obj1;
具體**如下:
class
myclass
myclass(
const
myclass &x
) myclass
&operator=(
const
myclass
& x)~myclass()
};int
main()
輸出:1203444
先建立物件obj1,呼叫建構函式並初始化為1,輸出1
再建立物件obj2,呼叫建構函式並初始化為2,輸出2
建立物件obj3,呼叫建構函式,使用預設值為0,輸出0
obj1賦值給obj3時,呼叫賦值函式,輸出3
再依次析構,析構的順序和呼叫構造的順序相反
先析構obj3,在析構obj2,最後析構obj1
class
myclass
myclass(
const
myclass &x
) myclass
&operator=(
const
myclass
& x)~myclass()
};int
main()
輸出:122444
依次建立物件obj1,obj2,呼叫兩次構造,分別輸出初始化的值1,2
myclass
obj3 = obj1;由於賦值的時候obj3還沒有建立,所以會呼叫拷貝建構函式,輸出2
再依次析構三個物件
c 拷貝建構函式和賦值函式
準備實現gof上面乙個迭代器模式,用到了上面的list基本類,但是一直對賦值函式和拷貝建構函式不是很熟悉,就研讀了一下effective c 的關於這方面的一章,頗有收穫,抽取了我認為精華的部分分享給大家。由於一直對c 這一類的用法不是很熟悉,有錯誤或者優化或者需要特別強調的地方希望朋友們幫忙指出來...
C 拷貝建構函式和賦值函式
include using namespace std class string 建構函式 析構函式 賦值函式是每個類最基本的函式。每個類只有乙個析構函式和乙個賦值函式。但有很兩個建構函式,乙個為拷貝建構函式,其他為普通建構函式。對於乙個類,如果不編寫這四個函式,c 編譯器將自動為a產生四個預設函式...
拷貝建構函式和賦值建構函式
class cmystring 賦值建構函式 cmystring cmystring operator const cmystring str 新分配記憶體,將str的m pdata記憶體拷貝到m pdata中 m pdata new char strlen str.m pdata 1 strcpy...