现在的位置: 首页 > 综合 > 正文

Deep Copy and Shallow Copy

2019年10月03日 ⁄ 综合 ⁄ 共 1073字 ⁄ 字号 评论关闭
Deep Copy and Shallow Copy
The terms "deep copy" and "shallow copy" refer to the way objects are copied, for example, during the invocation of a copy constructor or assignment operator. In a deep copy (also called "memberwise copy"), the copy operation
respects object semantics. For example, copying an object that has a member of type std::string ensures that the corresponding std::string in the target object is copy-constructed by the copy constructor of class std::string.

 
class A
{
 string s;
};
A a;
A b;
a=b; //deep copy

When assigning b to a, the compiler-generated assignment operator of class A first invokes the assignment operator of class std::string. Thus, a.s and b.s are well-defined, and they are probably not binary-identical. On the other hand, a shallow copy (also
called "bitwise copy") simply copies chunks of memory from one location to another. A memcpy() operation is an example of a shallow copy. Because memcpy() does not respect object semantics, it will not invoke the copy constructor of an object. Therefore, you
should never use memcpy() to copy objects. Use it only when copying POD (Plain Old Data) types: ints, floating point numbers, and dumb structs.

总结:

Shallow Copy = Bitwise Copy = 逐位拷贝= 浅拷贝 = 浅克隆,

Deep Copy = Memberwise Copy = 逐成员拷贝 = 深拷贝 = 深克隆.

抱歉!评论已关闭.