Effective C++讀書筆記---複製物件時勿忘每一個成員
阿新 • • 發佈:2019-01-02
核心點有兩個:
1、如果你堅持自己重寫拷貝建構函式,請記住:編譯器是不會提醒你是否少複製了某一個成員。
2、如果你重寫派生類的拷貝建構函式和拷貝操作符時,請記住:他們不會自動呼叫積累的拷貝建構函式和拷貝操作符。
以下為例子,注意手動呼叫基類的建構函式:
另外:消除拷貝建構函式與拷貝操作符的程式碼重複是新建一個成員函式供兩者呼叫,而不是用一個函式去呼叫另外一個函式。因為拷貝建構函式是在物件初始化時呼叫,而拷貝操作符是在物件初始化結束後呼叫。class PriorityCustomer:Public Customer { public: PriorityCustomer(const PriorityCustomer& rhs); PriorityCustomer& operator =(const PriorityCustomer& rhs); private: int priority; } PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs) :Customer(rhs) // 一定要呼叫基類的拷貝建構函式 :priority(rhs.priority) { }