c 深拷貝和淺拷貝的區別

2021-08-28 10:08:48 字數 547 閱讀 8134

其實深拷貝和淺拷貝都涉及到c#中的物件拷貝的問題,所謂物件拷貝就是為物件建立副本,得到相同的物件;

而深拷貝和淺拷貝的區別就在於,深拷貝完全將物件中的所有欄位都複製到副本物件中,但是不管拷貝的物件是引用型別字段還是值型別字段,都會被重新建立並複製,副本物件內的值並不會因為源物件資料的值得修改而改變;

相反的是,淺拷貝和深拷貝的不同之處就在於,同樣都是完全將物件的所有欄位都複製到副本物件中,值型別被複製之後,再源資料內修改,副本的值不發生改變,但是複製的為引用型別的值得時候,由於淺拷貝只複製引用型別值 的引用,所以當源資料中引用型別的值發生改變時,副本中的資料也會發生改變;

需要注意的是,無論是哪種拷貝,微軟都建議使用型別繼承icloneable介面的方式明確告訴呼叫者,該物件是否可用被拷貝。當然了,icloneable介面只提供了乙個宣告為clone的方法,我們可以根據需求在clone的方法內實現淺拷貝或者是深拷貝;

另外,由於string型別理論上是引用型別,但是由於該引用型別的特殊性,object.memberwiseclone方法仍舊為他建立了副本,也就是說,在淺拷貝過程中,我們應該將字串看成值型別。

C 淺拷貝和深拷貝的區別

c 預設的拷貝建構函式是淺拷貝 淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b....

C 淺拷貝和深拷貝的區別

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

C 淺拷貝和深拷貝的區別

深淺拷貝是面試面試經典問題 c 中的建構函式有三類,預設建構函式,有參建構函式,拷貝建構函式。首先考慮一種情況,對乙個已經定義的物件進行拷貝,編譯器會呼叫建構函式中的拷貝建構函式。淺拷貝 如果使用者沒有定義自己的拷貝建構函式,則會呼叫預設的拷貝建構函式。預設拷貝建構函式中會對物件中的變數進行簡單的賦...