C 淺拷貝與深拷貝

2021-06-06 05:00:57 字數 1026 閱讀 1531

淺拷貝(shallow copy)指的是當物件的字段被拷貝的時候,字段應用的物件不會被拷貝。
深拷貝是對物件例項當中的字段引用的物件也進行拷貝的一種方式。

淺拷貝可以通過將類實現介面icloneable

class myclass:icloneable

}

舉個簡單的例項

using system;

using system.collections.generic;

using system.text;

namespace chapter6

class a:icloneable

}class program

,a1.refclass.x",a1.y,a1.c.x);

console.writeline("a2資訊,a2.y:,a2.refclass.x", a2.y, a2.c.x);

console.writeline("修改a1的y和refclass.x後");

a1.y++;

a1.c.x++;

console.writeline("a1資訊,a1.y:,a1.refclass.x", a1.y, a1.c.x);

console.writeline("a2資訊,a2.y:,a2.refclass.x", a2.y, a2.c.x);

console.readkey();}}

}

結果如下:

為什麼修改後的a1.refclass.x 和a2.refclass.x的值一樣呢。因為a1的refclass為引用型別,在科隆成a2的時候,a2和a1實際是指向同一塊地方。所以,他們的值會同步變化。

深拷貝 往往需要自己定製。

class myclass:icloneable

}

C 深拷貝 與 淺拷貝

最近在寫一些c 程式,遇到個問題,記憶體會出錯,查了一些材料,終於發現問題所在了,原來碰到了傳說中的深拷貝和淺拷貝問題了,檢視一些材料,現在對這個問題做個總結 在類定義中,預設是淺拷貝,即 位拷貝 用在基本類中或者一些沒有指標的自定義型別中沒有一點問題,但是當遇到含有指標變數的自定義型別的時候,就會...

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...