C 中的複製 賦值 析構

2022-09-15 02:42:11 字數 1597 閱讀 7241

一直對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**)

輸出結果如下:

t1

enter 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

上面的例子不足以說明重寫複製、賦值、析構的重要性,當類中需要動態分配記憶體時,重要性就體現出來了:

class

testcopy2

;

//過載賦值操作符

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析構函式。這樣用基類指標指向的派生類的析構的時候,才會呼叫到自己的析構函式,將派生類的所有部分都析構掉,否則只...