若不想使用編譯器自動生成的函式,就該明確拒絕

2021-08-19 10:32:05 字數 454 閱讀 5184

一、中心思想

為駁回編譯器自動提供的技能,可將相應的成員函式宣告為private並且不予實現或者使用base class的做法

二、主要內容

1、將相應的成員函式宣告為private

將copy建構函式或賦值符函式宣告為private成員,使得使用者不能對其進行成功呼叫

e.gclass homeforsale

~uncopyable(){}

private:

uncopyable(const uncopyable&);

uncopyable& operator=(const uncopyable&);

}class homeforsale:

private unopyable

note:

編譯器生成預設的對應函式時,會嘗試呼叫基類的對應兄弟成員,這時候編譯器會拒絕,因為基類的拷貝函式是private的。

若不想使用編譯器自動生成函式,就該明確拒絕

編譯器會自動為我們生成建構函式,拷貝建構函式,賦值操作符和析構函式。如果想要拒絕他們自動生成,那麼就自行宣告他們,並且令這些函式為private,從而阻止人們呼叫他。方式一 很明顯直接的方法,正如前面所說的,將函式宣告為private,但是這樣並不絕對安全,因為member函式和friend函式還是...

6 若不想使用編譯器自動生成的函式,就明確拒絕

預設情況下,類class的copy建構函式和copy assgnment操作符會在類物件使用到的時候由編譯器自動生成。但是如果不想編譯器自動幫你生成這兩個方法時怎麼辦呢?解決方法有以下兩種 1 類設計者自己定義這兩個方法,並設定為private,這樣編譯器就不會幫你自動建立,如果這個類的物件需要用到...

若不想使用編譯器自動生成的函式,就應該明確拒絕

明確拒絕的方法 1 將copy建構函式和copy assignment函式宣告為private。2 上面的方法不是乙個完全方案 因為類的members成員函式和friends函式還可以訪問。一點改進就是指宣告而不定義他們,這樣有地方使用它們的時候,就會產生連線告警。3 宣告乙個baseclass,並...