C 通過序列化實現深拷貝

2021-09-08 00:09:25 字數 1354 閱讀 3856

關於淺拷貝深拷貝,我的理解不是很清晰,簡單說來,我認為是這樣子:

淺拷貝:引用成員在被拷貝時僅複製源物件中引用成員的位址到新物件中,所以在新物件中對引用成員進行更改會影響到源物件(除對引用成員進行賦值外)。

深拷貝:引用成員在拷貝時新建乙個引用物件到新物件中,且將源物件中引用物件的成員值複製到新物件的引用物件中,所以在新物件中對引用成員進行更改不會影響源物件。

這段程式的輸出為:

obja1.refclass.field = 10

obja2.refclass.field = 10

obja1.refclass.field = 10

obja2.refclass.field = 30

objb1.refclass.field = 20

objb2.refclass.field = 10  

要注意的是,本例中實現深拷貝的classb類及其引用成員refclass類必須新增serializable特性。

using

system;

using

system.collections;

using

system.collections.generic;

using

system.text;

using

system.io;

using

system.runtime.serialization.formatters.binary;

namespace

//被引用類,必須新增serializable特性,否則不能實現序列化

[serializable]

class

refclass

set }

} //

淺拷貝示例

class

classa : icloneable

set }

public

classa()

public

object

clone() }

//深拷貝示例,必須新增serializable特性,否則不能實現序列化

[serializable]

class

classb : icloneable }

public

classb() //

深拷貝

public

object

clone() }

class

program }

}

物件的深拷貝 序列化拷貝

簡介 system.object 幾乎是所有的類 結構 委託型別的基類。system.object有乙個memberwiseclone 的方法來幫助我們建立乙個當前物件的例項。存在的問題 system.object 提供的memberwiseclone 方法只是物件的淺拷貝,只能把當前物件的非靜態字...

WPF控制項深拷貝 序列化 反序列化

今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看如下 片段 void canvas1 dro...

WPF控制項深拷貝 序列化 反序列化

原文 wpf控制項深拷貝 序列化 反序列化 今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看...