條款十二 複製物件時勿忘其每乙個成分

2022-04-21 16:19:16 字數 777 閱讀 2468

1.在類裡涉及到物件拷貝的函式要複製類裡每乙個成分copy建構函式以及copy assignment操作符

class

test

test& operator = (const test&rhs)

};

這樣如果類裡再新增乙個成員變數時,就得需要修改這兩個函式,不然新成員不會被拷貝的新物件中,而且

編譯器一般不會報錯

2.在繼承中,注意base類的拷貝

class derve:public

test

derve& operator = (const derve&rhs)

};

雖然繼承類裡看到了兩個拷貝函式,但忘了base類的拷貝,繼承類物件裡也包含了base類的乙份副本,所以繼承類物件拷貝時也需要

拷貝base的副本,如果繼承類裡沒有呼叫base 的拷貝函式,會使用default的拷貝函式,如上面的繼承類,拷貝時使用的是base類的default

拷貝函式,則不能做到拷貝每個成分,在定義繼承類的時候可以呼叫base類的自定義拷貝函式

class derve:public

test

derve& operator = (const derve&rhs)

};

3.如果兩個拷貝函式有重複的**,可以定義乙個成員函式(如init()),將重複的**放到這個成員函式中,然後拷貝函式再呼叫這個init()函式,

這兩個拷貝函式不要互相呼叫,這樣不太好,應該把相同**放到第三方函式中

條款12 複製物件時勿忘其每乙個成分

effective c 第三版 當你編寫乙個copying函式,請確保 1 複製所有local成員變數 2 呼叫所有base classes內的適當的copying函式。令copy assignment操作函式呼叫copy建構函式是不合理的,因為這就像是圖構造乙個已經存在的物件。反方向,令copy構...

條款12 複製物件時勿忘其每乙個成分

條款12 複製物件時勿忘記其每乙個成分 這裡將copy建構函式和copy assignment操作符統稱為copying函式。1.copying函式應該確保複製 物件內的所有成員變數 及 所有base class成分 2.不要嘗試以某個copying函式實現另乙個copying函式。應該將共同機能放...

條款12 複製物件時勿忘其每乙個成分

如果你宣告自己的copying函式 拒絕編譯器的預設實現 當你為class新增乙個成員變數,你必須同時修改copying函式 也需要修改class的所有建構函式及任何非標準形式的operator 條款10有個例子 如果你忘記,編譯器不會告訴你。copying函式應該確保複製 物件內的所有成員變數 及...