Shallow Copy,Deep Copy,Bitwise Copy和Memberwise Copy

本文解析了浅拷贝(ShallowCopy)与深拷贝(DeepCopy)的区别,浅拷贝仅复制对象的内存位,而深拷贝会递归复制对象及其成员变量的逻辑数据。通过图解详细展示了浅拷贝可能引发的问题,并提供了深拷贝的具体实现方法。

在网上看到很多朋友对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.youkuaiyun.com/pathuang68/archive/2009/04/14/4071620.aspx

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值