Shallow Copy,Deep Copy,Bitwise Copy和Memberwise Copy

在网上看到很多朋友对Shallow Copy,Deep Copy,Bitwise Copy和Memberwise Copy这4者之间的关系的理解多有混淆,Stanley Lippman的“Inside the C++ Object Model”的讲解也比较晦涩难懂。玄机逸士在此给出一个简单的、明确的说明:)。请各位硕学高贤指正。

 

Java中的Clone也有浅克隆和深克隆之分,分别对应C++中的浅拷贝和深拷贝。

 

Shallow Copy = Bitwise CopyDeep Copy = Memberwise Copy.

Long story short, a shallow copy only copies the binary, in memory, print of a class. A deep copy “dives into” the members, and copy their logical data. Usually, by default, it is a Shallow/Bitwise copy.

 

下面是Shallow/Bitwise Copy的图解:

 

Shallow Copy,Deep Copy,Bitwise Copy和Memberwise Copy_第1张图片 

对象(地址0x200000B0)被浅拷贝到另外一个对象(地址0x200000C0),由于其中含有一个字符串对象,其地址为0x200000D0,在浅拷贝的时候,只是简单地将地址拷贝到新对象,因此原对象和新对象所指向的内容是一样的,都是“Hello, World”,如果新对象将该字符串进行了修改,那么原对象中对应的字符串也会发生同样的变化。而这在大部分情况下是不能接受的。

至于深拷贝,请参考:

http://blog.csdn.net/pathuang68/archive/2009/04/14/4071620.aspx

其中谈及的拷贝构造函数,对深拷贝有详细的说明。 

你可能感兴趣的:(java,c,object)