預設情況下,類class的copy建構函式和copy assgnment操作符會在類物件使用到的時候由編譯器自動生成。但是如果不想編譯器自動幫你生成這兩個方法時怎麼辦呢?
解決方法有以下兩種:
1、類設計者自己定義這兩個方法,並設定為private,這樣編譯器就不會幫你自動建立,如果這個類的物件需要用到這兩個方法時,由於許可權為private,所以編譯器在編譯階段會報錯。但是這樣,這個類class的menber函式和friend函式還是可以使用它們,解決方法就是,只是申明這兩個方法,而沒有定義實現,這樣的話,即使menber函式和friend函式使用了這兩個方法,鏈結器會在鏈結階段報錯,說呼叫的函式沒有實現。好,這個方法能夠解決了問題,但是如果期望在編譯階段就能發現錯誤,下面的方案可以解決。
2、定義乙個base class,並且base class中定義了private的copy建構函式和copy assgnment操作符,如下:
class mybase
class subclass : public mybase
當subclass 的物件要使用copy建構函式和assgnment操作符時,編譯器會先呼叫其基類的對應方法,但是其基類的對應方法被宣告為private了,編譯器會報錯,ok,在編譯階段發現了錯誤,完美解決。
若不想使用編譯器自動生成函式,就該明確拒絕
編譯器會自動為我們生成建構函式,拷貝建構函式,賦值操作符和析構函式。如果想要拒絕他們自動生成,那麼就自行宣告他們,並且令這些函式為private,從而阻止人們呼叫他。方式一 很明顯直接的方法,正如前面所說的,將函式宣告為private,但是這樣並不絕對安全,因為member函式和friend函式還是...
若不想使用編譯器自動生成的函式,就該明確拒絕
一 中心思想 為駁回編譯器自動提供的技能,可將相應的成員函式宣告為private並且不予實現或者使用base class的做法 二 主要內容 1 將相應的成員函式宣告為private 將copy建構函式或賦值符函式宣告為private成員,使得使用者不能對其進行成功呼叫 e.gclass homef...
若不想使用編譯器自動生成的函式,就應該明確拒絕
明確拒絕的方法 1 將copy建構函式和copy assignment函式宣告為private。2 上面的方法不是乙個完全方案 因為類的members成員函式和friends函式還可以訪問。一點改進就是指宣告而不定義他們,這樣有地方使用它們的時候,就會產生連線告警。3 宣告乙個baseclass,並...