c 拷貝建構函式和賦值函式注意的地方

2021-05-01 10:01:54 字數 1040 閱讀 3275

運用

copy

函式和copy assignment

函式進行賦值操作應該注意的兩點:

1)複製所有

local

成員變數

2)呼叫所有基類內的適當的

copying

函式。這裡面有乙個很可怕的規則

:當你不用編譯器預設的拷貝函式或者賦值函式時,編譯器也不會對你自己寫的這兩個函式進行報警。所以必須要很謹慎和小心。

對於沒有繼承的類來說,寫這兩個函式一般注意指標型別的複製就可以了

class base;

base& base::operator=(const base& base)

如果後來增加了乙個

int age

,但operator=

裡面什麼都沒有做,編譯器不會出錯!!

還有一種是對於繼承類:

class subbase : public base;如果

subbase::subbase(subbase &subbase)

:subage(subbase . subage)//

這樣做就夠了嗎?

subbase& subbase::operator=(const subbase& subbase)

如果僅僅這樣,就說明了當進行

coyp

建構函式時,實際上真正賦值的物件只有子類

subbase

類中的subbase;

而基類裡面並沒有實現正確賦值,因為你沒有顯示的呼叫基類的的這

copy

建構函式,沒有顯示呼叫,編譯器就會預設使用無參建構函式進行初始化。

呼叫到copy assignment

函式時是對基類的所有東西不做任何操作。

怎麼辦?

subbase::subbase(subbase &subbase)//

: base(subbase);

,subage(subbase . subage)

subbase& subbase::operator=(const subbase& subbase)

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...