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

2021-10-07 19:23:30 字數 755 閱讀 6259

class

date

;class

customer

;customer::

customer

(const customer &rhs)

:name

(rhs.name)

customer &customer::

operator=(

const customer &rhs)

一旦發生繼承,會造成此主題乙個潛藏危機

class

prioritycustomer

:public customer

;prioritycustomer::

prioritycustomer

(const prioritycustomer &rhs)

:priority

(rhs.priority)

prioritycustomer &prioritycustomer::

operator=(

const prioritycustomer &rhs)

copying函式看起來複製priorirycustomer宣告的成員變數,但是每個prioritycustomer還內含所繼承的customer成員變數復件,而那些成員變數未被複製;

任何時候只要你承擔起「為derived class撰寫copying函式」重大責任,必須小心的複製其base class成分

條款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函式應該確保複製 物件內的所有成員變數 及...