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 Copy,Deep 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的图解:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/pathuang68/EntryImages/20090424/1.GIF)
对象(地址0x200000B0)被浅拷贝到另外一个对象(地址0x200000C0),由于其中含有一个字符串对象,其地址为0x200000D0,在浅拷贝的时候,只是简单地将地址拷贝到新对象,因此原对象和新对象所指向的内容是一样的,都是“Hello, World”,如果新对象将该字符串进行了修改,那么原对象中对应的字符串也会发生同样的变化。而这在大部分情况下是不能接受的。
至于深拷贝,请参考:
http://blog.csdn.net/pathuang68/archive/2009/04/14/4071620.aspx
其中谈及的拷贝构造函数,对深拷贝有详细的说明。
Java中的Clone也有浅克隆和深克隆之分,分别对应C++中的浅拷贝和深拷贝。
Shallow Copy = Bitwise Copy,Deep 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
其中谈及的拷贝构造函数,对深拷贝有详细的说明。
相关文章推荐
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- 浅拷贝、深拷贝 Bitwise Copy和Memberwise Copy
- python 浅拷贝(shallow copy) 深拷贝(deep copy)
- C#中的浅复制(shallow copy),深复制(deep copy) 及 ICloneable
- python,deep copy,shallow copy
- Shallow Copy与Deep Copy
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- shallow copy与deep copy
- 浅拷贝(shallow copy)和深拷贝(deep copy)
- .NET中深复制(deep copy)与浅复制(shallow copy)
- Deep copy(深拷贝)和shallow copy(浅拷贝)的区别
- 浅拷贝、深拷贝 Bitwise Copy和Memberwise Copy
- 深入分析深拷贝(Memberwise Copy)和浅拷贝(Bitwise Copy)
- 浅复制(Shallow Copy)与深复制(Deep Copy)
- C#中的shallow copy 与deep copy(一)
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- [C++] Deep copy ,Shallow copy, copy constructor,"="
- assignment,shallow copy,deep copy,引用,不可变对象
- 由Python的浅拷贝(shallow copy)和深拷贝(deep copy)引发的思考
- 浅复制(Shallow Copy)与深复制(Deep Copy)