C 深拷貝 與 淺拷貝

2021-05-26 00:48:27 字數 501 閱讀 8864

最近在寫一些c++程式,遇到個問題,記憶體會出錯,查了一些材料,終於發現問題所在了,原來碰到了傳說中的深拷貝和淺拷貝問題了,檢視一些材料,現在對這個問題做個總結:

在類定義中,預設是淺拷貝,即「位拷貝」,用在基本類中或者一些沒有指標的自定義型別中沒有一點問題,但是當遇到含有指標變數的自定義型別的時候,就會出現問題了,舉個例子:

對於乙個基類t,裡面有乙個指標成員變數:char *data;

定義兩個t型別的物件:t a,b;

當進行這樣的操作時會發生什麼錯誤呢:

a.data=b.data;

發現問題了嗎?問題主要有三個: 1

2 3正是因為如此,當遇到這種情況的時候必須自定義拷貝建構函式和賦值函式:

class t ;

protect:

char *data;        }

這裡定義了乙個基類t的拷貝建構函式,當定義兩個t變數:

t b;

t a(b);

這個時候就不會出錯了

C 淺拷貝與深拷貝

淺拷貝 shallow copy 指的是當物件的字段被拷貝的時候,字段應用的物件不會被拷貝。深拷貝是對物件例項當中的字段引用的物件也進行拷貝的一種方式。淺拷貝可以通過將類實現介面icloneable class myclass icloneable 舉個簡單的例項 using system usin...

c 深拷貝與淺拷貝

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

c 淺拷貝與深拷貝

淺拷貝與深拷貝 像這樣的淺拷貝會導致程式崩潰,因為同乙個空間被釋放了兩次 include include using namespace std class s copy ostream operator class s copy s copy private char p ostream oper...