c 淺拷貝和深拷貝

2021-09-19 20:07:24 字數 590 閱讀 7001

class with point member(帶指標的類),一定有copy ctor(拷貝構造)和copy op=(拷貝賦值)

淺拷貝(講這個概念是為了跟你解釋為什麼一定要寫自己的版本):

如果你不寫拷貝構造和拷貝賦值,系統會為你預設生成這兩個函式。

而用系統裡面預設生成的函式,則會發生下圖中a和b的指標都指向「hello」,而「world」沒有指標指著它(這種情況叫記憶體洩漏)。

兩個指標指向同一塊記憶體也是危險的,因為你通過a改變字串的時候,b所指的內容也會隨之改變。如圖:

在程式設計裡面。alias(別名)是一件危險的事情。

深拷貝如下圖(拷貝構造的例子)

上圖是自己寫的拷貝建構函式:呼叫該函式之後,系統先申請記憶體,然後把傳入的引數拷貝到新申請的空間上,這就是深拷貝。

C 淺拷貝和深拷貝

class test test const test t val new int t.val test private int val 現在定義兩個物件,test t1 9 test t2 t1 如果你不提供copy建構函式 注釋掉的那個 那麼t1和t2的成員 val指向同乙個物件,當析構的時候,同...

c 深拷貝和淺拷貝

深拷貝和淺拷貝 ca const ca c 就是我們自定義的拷貝建構函式。可見,拷貝建構函式是一種特別的建構函式,函式的名稱必須和類名稱一致,他的唯一的乙個引數是本型別的乙個引用變數,該引數是const型別,不可變的。例如 類x的拷貝建構函式的形式為x x x 當用乙個已初始化過了的自定義類型別物件...

c 深拷貝和淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。iostream using namespace std class cexample void show ...