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