條款12 複製物件時勿忘其每一部分

2021-10-01 13:43:25 字數 765 閱讀 9247

是指:

二者統稱為:copying函式。

乙個類中一定會有這兩個函式,如果沒有手動寫,那麼編譯器則會自動生成預設的這兩個函式。如果手動寫的話,則需要引起一定的重視,即:複製物件時勿忘其每一部分。

情況一:為乙個類新增新的成員變數時。此時,必須更新所有的建構函式,使新新增的成員變數被初始化。

情況二:這樣的自定義copying函式的類,被派生類繼承時,派生類的copying函式必須呼叫base classcopying函式。

情況一:編譯器不會給出提示,可能導致不確定行為。

情況二:因為基類成員變數往往是私有變數,因此不能夠直接通過派生類訪問基類成員變數。因此只能通過建構函式進行初始化。如果派生類的copying函式沒有顯式呼叫base class 的copying函式,則會呼叫預設建構函式,此時能夠通過編譯。如果沒有預設建構函式,則不能通過編譯。

錯誤的做法:

賦值符號函式和複製建構函式所做的工作是非常類似的,**的重複度比較高。但是不能夠通過賦值符號函式呼叫複製建構函式或複製構造函式呼叫賦值符號函式來解決重複性問題。這兩種使用方法都不合乎邏輯。

正確的做法是:

將二者重複部分抽取出來,做出乙個成員函式。這樣的成員函式通常命名為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函式應該確保複製 物件內的所有成員變數 及...