评论

收藏

[C++] 认识浅拷贝和深拷贝

编程语言 编程语言 发布于:2021-12-05 13:23 | 阅读数:279 | 评论:0

系统默认构造函数就是浅拷贝,就是简单的进行赋值操作。
这也就会导致一个问题,使两个指针指向同一块地址。
例:
DSC0000.png
这里编译器书写的默认拷贝函数:
Person(const Person&q){_score=q._score;p=q.p;}
进行简单的赋值操作。
利用new关键字开辟的内存要通过delete关键字进行释放,析构函数这个时候就可以上场了。
~Person(){delete p;}
然后,报错了:
DSC0001.png
原因呢?很简单,因为p1.p和p2.p指向的是同一块地址,依据先定义后析构,p2.p先释放,轮到p1.p释放的时候就出现了问题,由于p2.p已经把那块内存给释放干净了,p1.p再释放,就是非法的了。
说到这里,不得不提一下,虽然释放了p2.p申请的内存地址,但是p2.p指向的地方依旧是那块内存地址,只是里面没有内容了。
DSC0002.png
对于深拷贝,就是解决浅拷贝简单的复制操作问题,比如使上面的两个指针指向的地址不同,但是解引用的内容相同。
DSC0003.png




如有不对,欢迎指正。


关注下面的标签,发现更多相似文章