Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
2014-05-25 16:44
218 查看
Memberwise copy: 在初始化一个对象期间,基类的构造函数被调用,成员变量被调用,如果它们有构造函数的时候,它们的构造函数被调用,这个过程是一个递归的过程.
Bitwise copy: 原内存拷贝.例子,给定一个对象object,它的类型是class Base.对象object占用10字节的内存,地址从0x0到0x9.如果还有一个对象objectTwo,类型也是class Base.那么执行objectTwo = object;如果使用Bitwise拷贝语义,那么将会拷贝从0x0到0x9的数据到objectTwo的内存地址,.也就是说Bitwise是字节到字节的拷贝.
对于默认的拷贝构造函数不会使用深拷贝,它只是使用浅拷贝.这意味着类的所有的成员是一层深度的拷贝而已。如果你的类或结构体成员中只是包含基本的数据类型例如int, float, char,那么Memberwise copy与Bitwise copy基本是相同的。但如果类中有指针存在,那么你可能会遇到问题。
例如下面的例子:
class A
{
int m1;
double d1;
char* pString;
};
如果你创建两个这样的类对象,class A a, b;并且你给a赋值,
a.mi = 6;
a.d1 = 10.123;
a.pString = new char[10];
astrcpy(a.pString, "test");//这里是浅拷贝
如果执行b = a;那么会把对象a的每一个成员的值赋值给b的每个成员。
b.m1 = a.m1;
b.d1 = a.d1;
b.pString = a.pString;//现在对象a和b的成员pString都执向相同的内存,删除任一个内存都会析放另一个对象的内存。
所以你需要深拷贝,它不是拷贝的内存地址而是拷贝内存地址的内容。一个默认的拷贝构造函数经常执行浅拷贝,只有拥有
自己的拷贝函数才可以实现深拷贝。
本文来自:http://blog.csdn.net/sghcpt/article/details/5578320
相关阅读文献:
http://blog.csdn.net/arcsinsin/article/details/9815937
Bitwise copy: 原内存拷贝.例子,给定一个对象object,它的类型是class Base.对象object占用10字节的内存,地址从0x0到0x9.如果还有一个对象objectTwo,类型也是class Base.那么执行objectTwo = object;如果使用Bitwise拷贝语义,那么将会拷贝从0x0到0x9的数据到objectTwo的内存地址,.也就是说Bitwise是字节到字节的拷贝.
对于默认的拷贝构造函数不会使用深拷贝,它只是使用浅拷贝.这意味着类的所有的成员是一层深度的拷贝而已。如果你的类或结构体成员中只是包含基本的数据类型例如int, float, char,那么Memberwise copy与Bitwise copy基本是相同的。但如果类中有指针存在,那么你可能会遇到问题。
例如下面的例子:
class A
{
int m1;
double d1;
char* pString;
};
如果你创建两个这样的类对象,class A a, b;并且你给a赋值,
a.mi = 6;
a.d1 = 10.123;
a.pString = new char[10];
astrcpy(a.pString, "test");//这里是浅拷贝
如果执行b = a;那么会把对象a的每一个成员的值赋值给b的每个成员。
b.m1 = a.m1;
b.d1 = a.d1;
b.pString = a.pString;//现在对象a和b的成员pString都执向相同的内存,删除任一个内存都会析放另一个对象的内存。
所以你需要深拷贝,它不是拷贝的内存地址而是拷贝内存地址的内容。一个默认的拷贝构造函数经常执行浅拷贝,只有拥有
自己的拷贝函数才可以实现深拷贝。
本文来自:http://blog.csdn.net/sghcpt/article/details/5578320
相关阅读文献:
http://blog.csdn.net/arcsinsin/article/details/9815937
相关文章推荐
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- 深拷贝、浅拷贝、memberwise copy 和 bitwise copy
- 浅拷贝、深拷贝 Bitwise Copy和Memberwise Copy
- 浅拷贝、深拷贝 Bitwise Copy和Memberwise Copy
- 深入分析深拷贝(Memberwise Copy)和浅拷贝(Bitwise Copy)
- 浅拷贝、深拷贝以及Memberwise Copy 和 Bitwise Copy
- 浅拷贝和深拷贝:有什么区别
- 深拷贝与浅拷贝的区别
- C# 浅拷贝与深拷贝区别
- C++浅拷贝和深拷贝的区别
- C++深拷贝和浅拷贝区别
- 拷贝构造和赋值操作符的区别
- C# 浅拷贝与深拷贝区别 解惑篇
- 深拷贝和浅拷贝之间的区别
- C++ 中 位拷贝与值拷贝的区别
- C# 浅拷贝与深拷贝区别
- C# 浅拷贝与深拷贝区别 解惑篇
- C# 浅拷贝与深拷贝区别 解惑篇(转)
- C++深拷贝和浅拷贝区别