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

2021-08-21 04:56:28 字數 812 閱讀 9862

編譯器會自動為我們生成建構函式,拷貝建構函式,賦值操作符和析構函式。如果想要拒絕他們自動生成,那麼就自行宣告他們,並且令這些函式為private,從而阻止人們呼叫他。

方式一:很明顯直接的方法,正如前面所說的,將函式宣告為private,但是這樣並不絕對安全,因為member函式和friend函式還是可以訪問到private成員。

方式二:在方式一的基礎上,只將函式宣告不給出定義,這樣編譯不出錯,但是有人(成員函式或者friend函式)呼叫的話,會出現鏈結錯誤(link error)。「將成員函式宣告為private但是故意不實現他們」也是c++ iostream程式庫阻止copying行為的一種伎倆。

方式三:將鏈結錯誤重新移植編譯期是可能的,只要將copy建構函式和copying assignment操作符宣告為private,並且放在專門阻止copying動作而設計的base class內。像 class uncopyable

class

uncopyable

~uncopable(){}

private:

uncopyable(

const uncopyable&);

uncopyable&

operator=(

const uncopyable&);

};如果類b想要阻止被拷貝,那麼我們唯一需要做的是private繼承自uncopyable

class

b: private

uncopyable{

...

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

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

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

一 中心思想 為駁回編譯器自動提供的技能,可將相應的成員函式宣告為private並且不予實現或者使用base class的做法 二 主要內容 1 將相應的成員函式宣告為private 將copy建構函式或賦值符函式宣告為private成員,使得使用者不能對其進行成功呼叫 e.gclass homef...

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

有 以下兩種方法避免編譯器自動生成拷貝建構函式 把 cpoy 建構函式和 copy assignment寫在基類的 private繼承裡,且只寫宣告,不寫引數名稱。class homeforsale 在子類繼承基類的時候,寫成 private 繼承。class uncopyable uncopyab...