浅拷贝和深拷贝
来源:互联网 发布:windows 调试模式 编辑:程序博客网 时间:2024/06/05 10:52
#include<iostream>#include<stdlib.h>using namespace std;/*浅拷贝:只拷贝值,不拷贝空间,自动Test t1 (t2)*//*深拷贝:*/class Test{int *m_p;public:Test(){m_p=NULL;m_p=(int*)malloc(sizeof(int));cout<<"Test()"<<endl;}//1.手写拷贝构造函数Test(const Test &t){//2.申请空间m_p=(int*)malloc(sizeof(int));//3.赋值*m_p=*t.m_p;cout<<"Test(const Test &t)"<<endl;}~Test(){if(m_p!=NULL){free(m_p);m_p=NULL;}cout<<"~Test()"<<endl;}void set(int value){*m_p=value;return;}void show(){cout<<"addr m_p="<<m_p<<endl;cout<<"data="<<*m_p<<endl;return;}};int main(int argc,char**argv){Test t1;Test t2(t1);Test t3(t1);cout<<"t1.set(110);"<<endl;t1.set(110);t1.show();t2.show();t3.show();return 0;}/*浅拷贝就是成员数据之间的一一赋值:把值一一赋给要拷贝的值。但是可能会有这样的情况:对象还包含资源,这里的资源可以是堆资源,或者一个文件。。当值拷贝的时候,两个对象就有用共同的资源,同时对资源可以访问,这样就会出问题。深拷贝就是用来解决这样的问题的,它把资源也赋值一次,使对象拥有不同的资源,但资源的内容是一样的。对于堆资源来说,就是在开辟一片堆内存,把原来的内容拷贝。
如果你拷贝的对象中引用了某个外部的内容(比如分配在堆上的数据),那么在拷贝这个对象的时候,让新旧两个对象指向同一个外部的内容,就是浅拷贝;如果在拷贝这个对象的时候为新对象制作了外部对象的独立拷贝,就是深拷贝 。
引用和指针的语义是相似的,引用是不可改变的指针,指针是可以改变的引用。其实都是实现了引用语义。
深拷贝和浅拷贝的区别是在对象状态中包含其它对象的引用的时候,当拷贝一个对象时,如果需要拷贝这个对象引用的对象,则是深拷贝,否则是浅拷贝。
*/
0 0
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 深拷贝和浅拷贝
- 深拷贝和浅拷贝
- 深拷贝和浅拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 深拷贝和浅拷贝
- 深拷贝和浅拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 深拷贝 和 浅拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 深拷贝和浅拷贝
- 深拷贝和浅拷贝
- 模拟数字小时钟
- Android开发大神博客汇总
- 让Ecshop网店系统用户自动登陆
- 自定义通用Adapter适配ListView GridView
- DAO层,Service层,Controller层、View层
- 浅拷贝和深拷贝
- init rtl8367
- 通信机制
- c++ explicit
- C标准库(1)
- PS学习笔记(三)——蒙版的使用
- 工作中的log4j
- 关于'MAMapKit/MAMapKit.h' file not found的解决方法(图文演示)
- OC第十天 内存管理高级