拷貝建構函式

2021-06-29 13:46:52 字數 817 閱讀 8244

拷貝建構函式,常被稱為x(x&)。

拷貝建構函式的作用:1.傳值;2.傳返回值; 3.物件初始化賦值。

當從乙個「老物件」複製出乙個「新物件」時,新物件將產生自己的記憶體空間,並且新物件具有和老物件一樣的記憶體空間結構;老物件的變數(指標、數字、字元、字串等定長型別)值都會被拷貝入新物件中。

但是,如果老物件中有堆記憶體,在新物件中並不會複製堆記憶體,而是指向老物件的堆記憶體。這就是淺拷貝,c++類會預設生成淺拷貝。

淺拷貝的侷限性是:新老物件指向相同的堆記憶體空間,乙個物件的堆記憶體發生改變,另外乙個也隨之改變。當物件析構時,這塊堆記憶體將釋放兩次。

如果我們想將老物件的堆記憶體也拷貝到新物件,就必須構建自己的拷貝建構函式,在拷貝建構函式中為新物件開闢堆記憶體、賦值,這就是深拷貝。

下面的例子用最「熱門」的string為例:

淺拷貝的實現很簡單:

m_data=another.m_data; //直接賦值,指標指向相同的堆記憶體

深拷貝:

m_data = new char[strlen(another.m_data) + 1]; //先開闢空間

strcpy(m_data,another.m_data);                 //再賦值

#include class string

;string::string(const char *str)

{ cout<<"string(const char *str)"string& string::operator =(const string &rhs)

{ cout<<"operator =(const string &rhs)"<

拷貝建構函式,預設拷貝建構函式

拷貝建構函式,預設拷貝建構函式 1.c 的預設拷貝建構函式,從深度拷貝和淺拷貝說起 c 類的預設拷貝建構函式的弊端 c 類的中有兩個特殊的建構函式,1 無參建構函式,2 拷貝建構函式。它們的特殊之處在於 1 當類中沒有定義任何建構函式時,編譯器會預設提供乙個無參建構函式且其函式體為空 2 當類中沒有...

建構函式 拷貝建構函式

建構函式可以分為三類 1 不帶引數的建構函式 在函式體中對資料成員賦初值,這種方式使該類的每乙個物件都得到同一組初值 2 帶引數的建構函式 如果使用者希望對不同的物件賦不同的初值,可以採用帶引數的建構函式。在呼叫不同物件的建構函式時從外面將不同的資料傳遞給建構函式,以實現初始化 3 複製建構函式 建...

建構函式 拷貝建構函式

person person 引用就是指標常量 所以person p person const p,引用所以一旦初始化指向某個位址,就不能在改變了。為什麼前面還要加const,因為拷貝建構函式的目的就是將乙個物件的所有屬性拷貝到另外乙個物件,這個物件的屬性不變,加上const 相當於 const pe...