阻止拷貝的三種方法 Cpp

2021-08-30 17:57:05 字數 925 閱讀 5639

當乙個物件是獨一無二的時候,為這個物件做乙個副本有點沒道理,所以我們應阻止對它進行的拷貝,但是,阻止這一動作並不是很直觀,通常來說,你不希望class的某一功能,只要不宣告對應的函式就行了,但這個策略對拷貝建構函式和賦值操作符思是無效的,因為如果你不宣告它們,編譯器會替你宣告乙個預設的,那麼該如何解決這個問題呢,通常來說,可以採取如下三種方法。

將拷貝建構函式和賦值操作符宣告為私有成員函式,並且只宣告而不實現,這樣似乎變得更安全一些,然而如果類的成員函式和友元函式呼叫它時,將會發揮僧錯誤,不過這種錯誤很容易檢查出來。

classa~

a()private:a

(const a&);

a&operator=(

const a&);

};

為這兩個操作單獨寫出乙個類,如下:

class

uncopyable

~uncopyable()

private

:uncopyable

(const uncopyable&);

uncopyable&

operator=(

const uncopyable&);

};//為阻止拷貝與賦值操作符,繼承uncopyable類;

classa:

private

uncopyable()

;

這樣,同樣能達成我們的目的。

我們還可以定義刪除的函式,它是這樣一種函式,雖然我們宣告了它們,但是我們不能以任何一種方式使用它,在函式的引數列表後面加上=delete來指出我們希望它定義為刪除的。

class

uncopyable

;

需要注意的是我們一般不定義析構函式為刪除的,那樣我們將不能銷毀此型別的物件了。

阻止拷貝的三種方式

有些時候我們在定義乙個類的時候不希望其中的拷貝控制成員 拷貝構造和拷貝賦值 起作用,也就是阻止拷貝,這時候可能有人會想,那我們乾脆不定義這樣的拷貝控制函式不就ok了,但悲催的是如果自己不定義,好心的編譯器也會及時的學習雷鋒好榜樣幫你合成定義,即傳說中的合成拷貝構造 合成拷貝賦值。既然如此,應該如何操...

vue 阻止預設表單提交的三種方法

vue在做表單提交的時候,需要用到一些自定義的驗證規則,這個時候就需要阻止表單預設的提交方式。方法一 直接阻止 form submit checkform action method post 當前元件新增乙個提交方法,在提交方法裡面做阻止 提交測試 checkform function e e.p...

Delphi中實現檔案拷貝的三種方法

delphi中實現檔案拷貝的三種方法 1 呼叫api函式 procedure copyfile fromfilename,tofilename string varf1,f2 file begin assignfile f1,fromfilename file 指定源檔名 assignfile f2...