c++复习记录1 深拷贝与浅拷贝

一、深拷贝与浅拷贝

浅拷贝又称为引用拷贝,就是拷贝之后,共用同一个实体,只是引用名不同了,对其所做的改变都将改变原来的值。

深拷贝又称为值拷贝,拷贝之后,有不同的名字,不同的内存空间,对其所做的改变都不会改变原来的值。

主要区别:在拷贝指针的时候,浅拷贝只是把指针拷贝一份,指针所指的内容不拷贝,拷贝后的结果是,两个不同的指针,但是指向同一块内存地址,这样就造成了在调用析构函数进行析构的时候,对同一块内存会析构两次,从而造成程序崩溃,内存泄露。

                   可以举例来理解,比如原函数中自定义的构造函数中,存在通过new进行动态分配的数据成员(new返回的是一个指针,指向新分配的内存,也就是拷贝时存在指针的拷贝的情况),而如果原函数中没有自定义的拷贝构造函数(内含对动态数据成员的重新动态分配),此时系统就会调用默认的构造函数,也就是只拷贝了指针,而该拷贝后的指针仍然指向原分配的内存。

                      浅拷贝,不只是把指针拷贝一份,还拷贝指针所指向的内容,拷贝后的结果是不同的两个指针,分别指向两个不同的内存。

所以在对象中存在指针或者引用的拷贝时,存在动态成员时,存在堆(比如new这种动态分配时),文件,系统资源时,一定要用深拷贝,避免浅拷贝,而避免浅拷贝是通过,添加自定义的拷贝构造函数,并且在自定义的拷贝构造函数中必须对动态成员,重新进行内存的动态分配。

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值