深拷貝 與 淺拷貝 驗證

2021-05-28 08:04:30 字數 1205 閱讀 2200

驗證內容:

淺拷貝:是指將物件的所有字段複製到乙個新物件。

對值型別字段只是簡單的拷貝乙個副本到目標物件,改變物件中值型別欄位的值不會反映到原始物件中,因為拷貝的是副本。

引用型字段則是拷貝他的乙個引用到目標物件.改變目標物件中引用型別欄位的值它反映到原始物件中,因為拷貝的是指向堆上的乙個位址。

深拷貝和淺拷貝不同的是對於引用欄位的解決,深拷貝將會新物件中建立乙個新物件和原始物件中對應字段相同(內容相同)欄位也就說這個引用和原始物件引用不同 我們改變新物件中這個字段時候不會影響到原始物件中對應字段內容。

[serializable]//深拷貝必須要可序列化

public class myclassa : icloneable

set

//引用型別

myobj obj = null;

public myobj obj

set

}private string b = string.empty;

public string b

set

}#region icloneable 成員

//淺拷貝

public object clone()

#endregion

//深拷貝

public object deepclone()

}[serializable]//引用型別也必須為可序列化

public class myobj

set

}string name = string.empty;

public string name

set

}public myobj(string n)

//測試

public class testclone

結果:--原物件輸出

1000

good

100b   (更改)

--淺拷貝輸出

100hello world!

100b   (更改)

--深拷貝輸出

100hello world!

100a

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝與深拷貝

淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...