阻止拷貝的關鍵是:由於所有編譯器產出的函式都是public,可以將拷貝建構函式和拷貝運算子宣告為private。明確宣告乙個成員函式,可以阻止編譯器自動建立其專屬版本,而令這些函式為private,可以阻止使用者呼叫它。
class home ;
當使用者拷貝home物件,編譯器會報錯。
為阻止拷貝動作而設計的基類
class uncopy //允許派生類物件構造和析構
~ uncopy ()
private:
uncopy &operator = (const uncopy &rhs); //拷貝運算子
uncopy (const uncopy &rhs); //拷貝建構函式
};
class home: private uncopy;
禁止使用者拷貝home物件時,繼承uncopy類。試圖拷貝home物件時,編譯器便試著生成乙個拷貝建構函式和拷貝操作符,這些函式嘗試呼叫其基類對應的函式,這些呼叫會被拒絕,因為基類的拷貝函式是private。
為了阻止編譯器自動生成拷貝函式和拷貝操作符,可以將相應的成員函式宣告為private並且不予實現。
Effective C 學習筆記 《六》
其實這一節的內容是和item5緊密相連的,上一節的核心圍繞著編譯器會自動生成類的一些方法,那麼這一節就是圍繞著如何去避免這些自動生成的方法。前一節說到如果想要編譯器避免自動生成,解決方法就是自己來寫乙個,而且要保證寫的這個 用不了 所以辦法就是宣告為private修飾的。但是這樣做其實是不夠安全的,...
Effective C 讀後筆記六
條款26 盡可能延後變數定義式的出現時間 除非在變數要使用的那一刻,否則不要提前定義變數。對於迴圈來說,當你不在迴圈外使用變數時,盡量在迴圈內定義變數。條款39 明智而審慎地使用private繼承 private繼承並不意味is a關係,即不是真正意義上的繼承,而是implemented in te...
Effective C 學習筆記
學習effective c 已經有相當長的一段時間了,今天抽出時間又堵了一遍第一部分 c語言 c 以c語言為基礎,幾乎支援所有的c語言成分,例如區塊 語句 預處理 內建資料型別 陣列 指標等,c語言的侷限是 沒有模板 沒有異常 沒有過載 物件導向的c 也就是加上了物件特性的c,類 封裝 繼承 多型 ...