首页 > 编程语言 > 详细

C++浅拷贝和深拷贝问题(二)(重要!)

时间:2021-09-04 03:53:11      阅读:17      评论:0      收藏:0      [点我收藏+]

上一个随笔我讲了深浅拷贝的问题,也提到了operator=这个方法,那这个方法什么时候用会出现问题呢,上一个随笔是通过拷贝狗仔Person p2(p1)来赋值,那我如果想直接赋值p1=p2呢?

如果不是堆区的数据的话,那很简单,直接把p2所有的属性值赋值到p1的所有的属性上.那如果数据是堆区呢?那是不是又出现了两个对象指向同一个地址的,导致内存重复释放的问题!

所以这是后要重写operator=这个方法,为新对象重新开辟内存。

所以,一般来说这个重写operator=方法和重写拷贝构造函数时一起的

重写拷贝构造就是:正常数据重新赋值,为堆区数据重新开辟大小相等的内存

重写operator=就是:比重写拷贝构造多了判断之前的堆区是否有数据,有数据的话要清空(为什么要清空?

例如

Person p1(18);

Person p2(20);

p1=p2;

因为赋值之前p1内有数据,所以要把它清空再赋值

而拷贝构造Person p2(p1),此时的p2还没有数据,所以不需要清空

 

 

 

 

C++浅拷贝和深拷贝问题(二)(重要!)

原文:https://www.cnblogs.com/1930110419lx/p/15221315.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!