一直對c++的複製(copy)、賦值(assign)操作比較困惑,現在看書的時候看到了,就把它順便記下來。
一下**可以熟悉什麼時候觸發複製操作,以及什麼時候觸發賦值操作://testcopy.cpp : 定義控制台應用程式的入口點。
//#include
"stdafx.h
"#include
#include
using
namespace
std;
class
testcopy
;
//過載賦值操作符
testcopy& operator=(const testcopy&t)
//複製建構函式
testcopy(const testcopy&t):a(t.a)
~testcopy()
inta;
};void
f1(testcopy t2)
testcopy f2()
int _tmain(int argc, _tchar*ar**)
輸出結果如下:
t1enter constructor
t2enter copy constructor
t3enter constructor
enter operator=f1
enter copy constructor
enter f1
enter destructor
f2enter constructor
enter f2
enter constructor
enter copy constructor
enter destructor
enter operator=enter destructor
endenter destructor
enter destructor
enter destructor
enter destructor
上面的例子不足以說明重寫複製、賦值、析構的重要性,當類中需要動態分配記憶體時,重要性就體現出來了:classtestcopy2
;
//過載賦值操作符
testcopy2& operator=(const testcopy2&t)
//複製建構函式
testcopy2(const testcopy2& t):buf(new
char[128
])
~testcopy2()
char*buf;
};
1. 如果乙個類需要乙個析構函式,那麼它一定需要過載複製和賦值操作。**2. 如果乙個類需要過載複製操作,那麼它一定需要過載賦值操作,反之同成立。
3. 如果乙個類需要過載複製和賦值操作,但是不一定需要過載析構操作。
C 構造 析構 賦值運算
有時候,某個物件是獨一無二的,不能沒複製也不能被賦值!所以我們要強制編譯器不允許使用 和copy 建構函式,但如果你不寫他們,編譯器又會自動幫你加上,問題由此引發。class home uncopyable private uncopyable const uncopyable uncopyable...
C 構造析構this過載賦值
記錄一下 1.建構函式和析構函式 對物件進行初始化和 物件資源。物件生命週期以建構函式開始,以析構函式結束。建構函式 析構函式與所在類具有相同名字,析構函式名前有 析構函式自動釋放物件所佔空間。建構函式 首先了解this保留字在類的建構函式中,this作為值型別,它表示對正在構造的物件本身的應用。析...
c 構造 析構 賦值 運算
1 為多型基類宣告virtual析構函式 帶有多型形態的base classs應該宣告乙個virtual析構函式。如果該class帶有任何virtual的函式,它就應該擁有乙個virtual析構函式。這樣用基類指標指向的派生類的析構的時候,才會呼叫到自己的析構函式,將派生類的所有部分都析構掉,否則只...