Shun 发表于 2021-12-5 13:23:33

认识浅拷贝和深拷贝

系统默认构造函数就是浅拷贝,就是简单的进行赋值操作。
这也就会导致一个问题,使两个指针指向同一块地址。
例:

这里编译器书写的默认拷贝函数:
Person(const Person&q){_score=q._score;p=q.p;}进行简单的赋值操作。
利用new关键字开辟的内存要通过delete关键字进行释放,析构函数这个时候就可以上场了。
~Person(){delete p;}然后,报错了:

原因呢?很简单,因为p1.p和p2.p指向的是同一块地址,依据先定义后析构,p2.p先释放,轮到p1.p释放的时候就出现了问题,由于p2.p已经把那块内存给释放干净了,p1.p再释放,就是非法的了。
说到这里,不得不提一下,虽然释放了p2.p申请的内存地址,但是p2.p指向的地方依旧是那块内存地址,只是里面没有内容了。

对于深拷贝,就是解决浅拷贝简单的复制操作问题,比如使上面的两个指针指向的地址不同,但是解引用的内容相同。





如有不对,欢迎指正。


https://blog.51cto.com/u_15363771/4749139
页: [1]
查看完整版本: 认识浅拷贝和深拷贝