拒絕編譯器自動生成的函式

2021-07-16 20:53:15 字數 382 閱讀 5686

編譯器自動的函式:

有些場景中需要拒絕這些編譯器自動生成的函式,可以通過下列方法,定義uncopyable類並繼承它。

拒絕使用編譯器生成的函式:

class uncopyable

; ~uncopyable(){};

private: //拒絕copy

uncopyable(const uncopyable&); //在這裡宣告,不用定義

uncopyable& operator=(const uncopyable&)

};

這樣編譯器就可以拒絕產生copy建構函式,和operator=。

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

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

為何編譯器無法自動生成拷貝函式

c 編譯器一般會為使用者自定義型別生成預設拷貝函式。它的行為是逐位複製。逐位複製的意思不是memcpy,而是逐個變數進行複製。很多書有教導如何禁用掉編譯器的拷貝函式 自己宣告乙個private的拷貝函式。不過有些時候我們沒有故意禁用拷貝函式,卻發現編譯錯誤 提示沒有相應拷貝函式。這是為什麼呢?一般發...

編譯器自動生成預設建構函式的情況

在程式設計師沒有為類定義預設建構函式的情況下,c 編譯器在某些情況下會自動生成預設建構函式。1.類中包含的其他有預設建構函式的類的物件 例如 class a private int data public a a a this data 10 class b private a m a int m ...