c++拷貝建構函式(深拷貝,淺拷貝)
c++中複製建構函式與過載賦值操作符總結
深拷貝和淺拷貝的區別
對深拷貝與淺拷貝的再次理解
禁止使用類的copy建構函式和賦值操作符
拷貝建構函式中的陷阱
在c++中建立乙個類,這個類中肯定會包括建構函式、析構函式、複製建構函式和過載賦值操作。
複製建構函式是一種特殊的建構函式,其作用也是為類的成員初始化以及為物件的構造分配儲存空間。函式的名稱必須和類名稱一致,無返回型別,它的唯一的乙個引數是本型別的乙個引用變數,該引數是const型別,不可變。
複製建構函式原型如下:
class_name(const class_name &src);
對於乙個類x, 如果乙個建構函式的第乙個引數是下列之一:a) & x; b) const & x; c) volatile & x; d) const volatile & x;
且沒有其他引數或其他引數都有預設值,那麼這個函式是拷貝建構函式,如下:
x::x(const & x);
x::x(& x, int=1);
x::x(& x, int a=1, int b=2);
過載賦值操作符是乙個特別的賦值運算子,通常是用來把已存在的物件賦值給其它相同型別的物件。
過載賦值操作符的原型如下:
class_name& operator=(const class_name &src);
當類的物件需要拷貝時,複製建構函式將會被呼叫。以下情況都會呼叫複製建構函式:
乙個物件以值傳遞的方式傳入函式體;
乙個物件以值傳遞的方式從函式返回;
乙個物件需要通過另外乙個物件進行初始化。
如果物件在宣告的同時將另乙個已存在的物件賦給它,就會呼叫複製建構函式;如果物件已經存在了,然後再將另乙個已存在的物件賦給它,呼叫的就是過載賦值運算子。
#include using namespace std;
class ctest
~ctest(){}
ctest(const ctest &test)
ca(const ca& c)
void show()
;
這種方法的一點小缺陷是,如果該類的成員函式或其友元函式呼叫複製建構函式或賦值操作符函式,會將錯誤推後到連線期。有一種方法可以將連線期錯誤移至編譯期:先定義乙個基類,然後讓你的類繼承該類。
複製建構函式VS賦值操作符過載
複製建構函式,又稱拷貝建構函式。是一種特殊的建構函式,它在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件。拷貝建構函式通常用於 如果在類中沒有定義拷貝建構函式,編譯器會自行定義乙個。如果類帶有指標變數,並有動態記憶體分配,則它必須有乙個拷貝建構函式。拷貝建構函式的最常見形式如下 cla...
C 中複製建構函式與過載賦值操作符總結
前言 這篇文章將對c 中複製建構函式和過載賦值操作符進行總結,包括以下內容 複製建構函式和過載賦值操作符的定義 複製建構函式和過載賦值操作符的呼叫時機 複製建構函式和過載賦值操作符的實現要點 複製建構函式的一些細節。複製建構函式和過載賦值操作符的定義 我們都知道,在c 中建立乙個類,這個類中肯定會包...
複製建構函式與賦值操作符
乙個類裡是否需要複製建構函式?有時候答案是 是 如果你的類在建構函式裡分配了資源,則可能需要乙個顯式的複製建構函式來管理資源。有析構函式的類通常用析構函式來釋放建構函式分配的資源,這通常也說明需要乙個複製建構函式。如果需要複製建構函式,則多半需要乙個賦值操作符。類x的賦值由x operator 來定...