當乙個物件是獨一無二的時候,為這個物件做乙個副本有點沒道理,所以我們應阻止對它進行的拷貝,但是,阻止這一動作並不是很直觀,通常來說,你不希望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...