博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++深拷贝浅拷贝
阅读量:5154 次
发布时间:2019-06-13

本文共 912 字,大约阅读时间需要 3 分钟。

 

深拷贝和浅拷贝的根本区别是变量和指针内存申请方式的不同导致的,如果对一一个变量则不存在深拷贝和浅拷贝的区别,对于一些类中包含指针的需要进行动态分配内存的进行拷贝的时候会有深拷贝和浅拷贝的区别

事例如下:

1 #include
2 3 using namespace std; 4 5 class CE 6 { 7 private: 8 int a; 9 public:10 CE(int b)11 {a=b;} 12 };13 int main()14 {15 CE A(100)16 CE B=A;17 return 0; 18 }

在该例子中class CE没有提供复制构造函数,所以编译器会提供默认的复制构造函数,默认的复制构造函数只是对新的对象的a进行赋值,即a=b操作,在此过程中不存在深拷贝和浅拷贝的区别

例2

class CE{    private:  int a;  char *b;public:CE(int c,char *d){  a=c;  b=d;    } CE(const CE& e){  a=e.a;  b=e.b;    }   //默认构造函数CE(const CE& e){  a=e.a;  b=new char [a];  if(b!=0)strcpy(b,e.b);     }   //深拷贝要提供的构造函数}int main(){  CE A(10,"hello");  CE B=A;return 0    }

 在例2中类中包含指针,则如果不提供复制构造函数怎默认构造函数只是对指针的赋值,并没有重新开辟内存空间,和被复制的b指向同一块内存空间,这种就是浅拷贝,但是这种拷贝容易因为一个对象的析构导致共同指向的内存释放,从而另外一个对象的指针就是野指针了,如果按照例子中提供的复制构造函数,则b会从先心脾内存空间,两个对象中的b指向的也不是同一块内存空间,这样举不会出现上面出现的问题。

 

转载于:https://www.cnblogs.com/hana12169/p/3995540.html

你可能感兴趣的文章
array_reduce() 与 array_map()
查看>>
SASS实现代码的重用:混合器Mixin、继承
查看>>
《windows核心编程系列》三谈谈内核对象及句柄的本质
查看>>
Linux下安装maven
查看>>
使用OpenMP实现并行归并排序(Report)
查看>>
转:【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量...
查看>>
linux nohup【转】
查看>>
SQL语句优化
查看>>
校验银行卡号是否符合Luhn算法及生成符合Luhn算法的银行卡号
查看>>
MFC 双缓冲加载背景
查看>>
记录自己最近的学习状态
查看>>
hdu 1142 最短路+记忆化深搜---好题
查看>>
day 018 面向对象--约束和异常处理
查看>>
Day3_基本数据类型
查看>>
Fire Maze(广度优先搜索)
查看>>
Linux Kernel API
查看>>
oracle学习
查看>>
【C语言项目】贪吃蛇游戏(下)
查看>>
DevExpress第三方控件汉化的全部代码和使用方法
查看>>
二分查找算法(C#实现)
查看>>