国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

只讀文件可以拷貝么 c 中如何正確實(shí)現(xiàn)克隆(原型)模式?

c 中如何正確實(shí)現(xiàn)克隆(原型)模式?克隆模式一般針對引用語義(一般只能復(fù)制對對象的引用)的語言,如java,需要通過clone方法顯式的創(chuàng)建與原對象完全一樣的對象;而C 原則上不需要克隆模式,因?yàn)?/p>

c 中如何正確實(shí)現(xiàn)克?。ㄔ停┠J剑?/h2>

克隆模式一般針對引用語義(一般只能復(fù)制對對象的引用)的語言,如java,需要通過clone方法顯式的創(chuàng)建與原對象完全一樣的對象;而C 原則上不需要克隆模式,因?yàn)?,C 本質(zhì)上是值語義的,一般有默認(rèn)的或自定義的拷貝構(gòu)造函數(shù)和拷貝賦值操作符,可以方便的復(fù)制(深拷貝)完全一樣的對象;

不過,C 是很靈活的,也許用戶定義了引用語義的class(類似智能指針那樣的東西),這時(shí)可以通過定義clone接口提供深拷貝復(fù)制對象的方法;

關(guān)于C 的拷貝控制、智能指針、移動(dòng)語義等等知識(shí),可以參考小編的C 11系列文章,歡迎關(guān)注!

PHP對象的淺復(fù)制與深復(fù)制的實(shí)例詳解?

原型模式

用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象

原型模式是基于深復(fù)制和淺復(fù)制的,在Java里面有2種復(fù)制:

淺復(fù)制

將一個(gè)對象復(fù)制之后,生成一個(gè)新的對象,新對象的所有成員變量(基本類型或引用類型)都含有與原

有對象相同的值,如果原有對象的成員變量是基本數(shù)據(jù)類型,就會(huì)將這個(gè)變量的值拷貝一份到新對象

里面,如果原有對象的成員變量是引用數(shù)據(jù)類型,那么這個(gè)引用指向的對象不會(huì)新生成一份,而是,

在新對象里面的這個(gè)引用跟原有對象的引用指向的是同一個(gè)對象。

深復(fù)制

將一個(gè)對象復(fù)制之后,生成一個(gè)新的對象,新對象的基本數(shù)據(jù)類型變量含有與原有對象相同的值,如

果原有對象的成員變量是引用數(shù)據(jù)類型,在新對象里面,這些引用變量將指向被復(fù)制過的新對象,而

不再是指向原有的那些被引用的對象,深復(fù)制把要復(fù)制的對象所引用的對象都復(fù)制一遍。

比如:

有一個(gè)A對象,經(jīng)過復(fù)制之后產(chǎn)生一個(gè)B對象,如果A里面有一個(gè)int型的變量i值為4,那么B對象里面

的inti的值也是4,A對這個(gè)int型變量的改變,不會(huì)影響B(tài),如果A里面有一個(gè)成員變量c是引用類型

的,它指向了對象D,經(jīng)過復(fù)制,B里面也會(huì)有一個(gè)c,這個(gè)c也指向D對象,A的c和B的c指向的是同一個(gè)

對象D,這就是淺復(fù)制。如果是深復(fù)制,A里面的c指向一個(gè)D對象,對于B里面的c會(huì)指向一個(gè)新的對象

,他們指向的不是同一個(gè)對象,這樣,在原有對象里面對成員變量c指向的對象D做的任何改變,不會(huì)

影響新對象。

舉個(gè)最簡單的例子:

classA{

publicinti

publicintj

}

Aa=newA()

淺拷貝:

Aa1=a

深拷貝:

Aa1=newA()

a1.i=a.i

a1.j=a.j

感覺如下:

淺拷貝只拷貝對象本身

深拷貝則拷貝對象中引用的對象,一直拷貝下去。