Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
来源:互联网 发布:苏州网络学校 编辑:程序博客网 时间:2024/06/05 23:49
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
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- 浅拷贝、深拷贝 Bitwise Copy和Memberwise Copy
- 深拷贝、浅拷贝、memberwise copy 和 bitwise copy
- 浅拷贝、深拷贝以及Memberwise Copy 和 Bitwise Copy
- 浅拷贝、深拷贝 Bitwise Copy和Memberwise Copy
- 深入分析深拷贝(Memberwise Copy)和浅拷贝(Bitwise Copy)
- C++ Object Model:Default Memberwise Initialization/bitwise copy semantics及深拷贝/浅拷贝
- Default Memberwise Initializtion 和Bitwise Copy Semantics 的区别
- Python copy()与deepcopy()区别,深拷贝与浅拷贝
- 深拷贝和浅拷贝:strong与 copy 区别
- Default MemberWise Initialization 与 bitwise copy semantics
- Default Memberwise Initialization 与 Bitwise Copy Semantic
- 深拷贝,浅拷贝与copy,strong
- 深拷贝deepcopy与浅拷贝copy
- 深拷贝和浅拷贝(copy)的区别
- retain、copy、mutableCopy的区别(深拷贝 浅拷贝)
- 敏捷项目管理实践
- C++专题分析------无法满足内存分配需求时的解决方法
- 《笑傲江湖》游戏系统抽象类uml浅析
- 数据库设计三大范式
- Android官方提供的支持不同屏幕大小的全部方法(转载)
- Memberwise copy(深拷贝)与Bitwise copy(浅拷贝)的区别
- Ubuntu下安装myeclipse10.7.1
- XML(2)——再看spring配置文件
- 如何上传开源项目代码
- iOS开发- 启动动画(动态欢迎界面,非静态Default)
- Android利用canvas画各种图形
- win2008r2下k312.3active组件无法创建对象问题的解决
- 利用mmap /dev/mem 读写Linux内存
- #include<time.h> 库函数详解