C 學習 copy建構函式及淺拷貝和深拷貝

2021-07-06 09:02:44 字數 814 閱讀 8194

作為物件導向語言,類的使用必不可少,構造引數自然也就無可避免。下面總結一下c++中的copy建構函式,在這之前需要了解淺拷貝和深拷貝的區別。

copy建構函式的形式:

//copy建構函式,形參的實行必須是const type& name

classtype (const classtype& cs);

copy建構函式的作用是使用乙個物件去初始化另外乙個物件,如果不寫系統會自動提供乙個copy建構函式,但這個copy建構函式只是進行淺拷貝,當類中的屬性是複雜型別是會出現一些意料之外的問題。

class name

//copy建構函式

name(const name &myname)

~name() }

};

對於上面這個類,如果沒有自己的copy建構函式,當進行下面這個操作,在析構這兩個物件時程式會出現coredump;

name name1("jhsdgfh");

name name2 = name1;

這是因為/呼叫c++提供的預設copy建構函式,只是進行淺拷貝,只是將name1內的值拷貝乙份放到name2棧記憶體中,兩個物件中的p指標所指向的位址都是同乙個塊位址。而在析構時析構name2後,p所指向的記憶體空間已經被析構。再析構name1是,由於p所指的記憶體空間已被析構,所以出現coredump

所以要自己寫copy建構函式,完成深拷貝,在初始化乙個物件時另開闢出一塊單獨儲存空間存放;這樣就避免上述問題的出現。

ps:有點繞希望日後自己還能看的明白

拷貝建構函式 深cop與淺copy

在乙個類物件的定義過程中,物件初始化分為兩種 1 直接初始化,要求編譯器使用普通的函式匹配,選擇我們提供的最匹配的建構函式,2 拷貝初始化,要求編譯器將右側運算物件拷貝到正在建立的物件中,通常使用拷貝建構函式來完成。直接初始化,使用string的建構函式string size t n,char c ...

C 中拷貝建構函式及深拷貝和淺拷貝

1 拷貝建構函式 先看個簡單的例子 includeusing namespace std class test void print 2 深拷貝和淺拷貝 在某些情況下 如果類中包含了指標 類內成員變數需要動態開闢堆記憶體,如果實行位拷貝 即淺拷貝 也就是把物件裡的值完全複製給另乙個物件,如obj1 ...

C 拷貝建構函式 深拷貝,淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。執行程式,螢幕輸出100。從以上 的執行結果可以看出,系統為物件b分配了記憶體並完成了與物件a的複製過程。就...