您的位置:首页 > 运维架构

Shallow Copy,Deep Copy,Bitwise Copy和Memberwise Copy

2009-04-24 11:46 267 查看
在网上看到很多朋友对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的图解:



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

至于深拷贝,请参考:

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



其中谈及的拷贝构造函数,对深拷贝有详细的说明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: