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

上一个随笔我讲了深浅拷贝的问题,也提到了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++浅拷贝和深拷贝问题(二)(重要!)

上一篇:app自动化测试----基础入门appium初使用(UI自动化,启动app并登录)


下一篇:工具04:PuTTY的小伙伴PuTTYgen和Plink