《Effective C++》學習筆記條款12 複製物件時勿忘其每一個成員
阿新 • • 發佈:2018-12-30
條款12:複製物件時勿忘其每一個成員
還記得條款5中提到編譯器在必要時會為我們提供拷貝建構函式和拷貝賦值函式,它們也許工作的不錯,但有時
候我們需要自己編寫自己的拷貝建構函式和拷貝賦值函式。如果這樣,我們應確保對“每一個”成員進行拷貝(復
制)。
如果你在類中新增一個成員變數,你必須同時修改相應的copying函式(所有的建構函式,拷貝建構函式以及拷貝
賦值操作符)。
在派生類的建構函式,拷貝建構函式和拷貝賦值操作符中應當顯示呼叫基類相對應的函式,否則編譯器可能又“自
作聰明瞭”。
當你編寫一個copying函式,請確保:
(1)複製所有local成員變數;
(2)呼叫所有基類內的適當copying函式。
但是,我們不該令拷貝賦值操作符呼叫拷貝建構函式,也不該令拷貝建構函式呼叫拷貝賦值操作符。想想,一個
是拷貝(建立物件),一個是賦值(物件已經存在)。
請記住:
- Copying函式應該確保複製“物件內的所有成員變數”及“所有基類成員”;
- 不要嘗試以某個copying函式實現另一個copying函式。應該將共同機能放進第三個函式中,並由兩個copying函式共同呼叫。