拒絕物件的賦值與複製做法

2021-07-14 14:59:13 字數 632 閱讀 9953

有時候,乙個類中的資源是獨一無二的,應拒絕用複製建構函式的方法或過載=運算子時,需要怎麼做呢?

有些人想將copy建構函式或copy asssignment操作符設為private,某些情況下,可能行得通,類外的確不可以直接呼叫,但如果使用成員函式或friend函式呢?

所以,下面介紹一種奇淫技巧:

首先我們建立乙個基類

class uncopyable

uncopyable() {}

private:

uncopyable(const uncopyable&);

uncopyable& operator =(const uncopyable&);

};

為了使我們的物件禁止拷貝,我們要做的就是採用private的方法繼承它

class b :private uncopyable

;

這時候,我們再想copy,不管你用成員函式還是friend函式,編譯器都會生成乙個copy建構函式和乙個copy assignment運算子,這些編譯器生成的會呼叫其基類的,但是這樣呼叫會被拒絕,因為base class的拷貝建構函式是private,而且我們採用的是private繼承的方法,是不是很巧妙呢?

物件的賦值與物件的複製

物件的賦值針對指物件中所有資料成員的值 物件的賦值只對其中的資料成員賦值 物件賦值中,不涉及成員函式的話題,因為同一類的所有物件有各自 的成員資料,但是成員函式是共享的。同類物件之間可以互相賦值,物件名1 物件名2.實現的原理 賦值運算子的過載。物件的複製是用已有的物件轉殖出乙個新物件 類名 物件2...

c 物件的複製與賦值

1 物件的賦值 如果對乙個類定義了兩個或多個物件,則這些同類的物件之間可以互相賦值,或者說,乙個物件的值可以賦給另乙個同類的物件。這裡所指的物件的值是指物件中所有資料成員的值。物件之間的賦值也是通過賦值運算子 進行的。本來,賦值運算子 只能用來對單個的變數賦值,現在被擴充套件為兩個同類物件之間的賦值...

物件的賦值和複製

物件之間可以通過賦值運算子 進行賦值運算,通過以下的程式可以看出。include using namespace std class box box box int h,int w int len int box volume int main 說明 物件的賦值只對其中的資料成員進行賦值,而不對成員...