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

2021-09-23 20:17:06 字數 545 閱讀 8017

1.當你寫好copying系列函式的時候,如果你為class新增乙個成員函式,你必須同時修改copying函式(你也需要修改class的所有建構函式以及任何非標準形式的operator=)。如果你忘記了,編譯器不太可能提醒你。

2.當發生繼承的時候,任何時候只要你承擔起為derived class撰寫copying函式的時候,必須很小心的也複製其base class成分。那些成分往往是private,所以你無法訪問它們,你應該讓derived class的copying函式呼叫相應的base class函式(在member initialization list中呼叫)。

本條款題目所說的「複製每乙個部分」現在應該非常清楚了,當你編寫copying函式,請確保(1)複製所有的local成員變數,(2)呼叫所有base classes內的適當的copying函式。

3.這兩個copying函式往往擁有近似相同的結構,但是令某個copying函式呼叫另外乙個copying函式是不可以的。最好的方法是你發現兩個copying函式有近似的**,最好的方法是提到乙個新的函式中,讓copying函式取呼叫這個新函式來避免**重複。

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