c++ 深浅拷贝(必须要理解掌握)

导语:

业内流传一句话:不懂C/C++就不是真正的程序员;C/C++是程序员的骄傲,掌握C/C++是成为一名优秀程序员必备的知识底蕴和素养。–这是摘自CSDN首页的一则广告语

深浅拷贝

 必须要掌握和理解的,
  必须要掌握和理解的,
   必须要掌握和理解的,
    3遍
     连这个都搞不明白怎么好意思说自己是c++ 程序员 .......
先来看一个类

在这里插入图片描述

类结构就是
一个传参构造
一个拷贝构造
一个析构
一个 私有 char* 变量

在这里插入图片描述
这样执行会有问题吗? 来看一下

在这里插入图片描述

死掉了 why?

一步一步的看

在这里插入图片描述

在这里插入图片描述

再来看看这个拷贝构造

在这里插入图片描述

char* 的私有变量同时指向一块地址 0x00d4e3c8

指向同一块地址,那么一析构 释放内存那不炸了吗 !!!

这就是浅拷贝
浅拷贝:又称值拷贝,将源对象的值拷贝到目标对象中去,本质上来说源对象和目标对象共用一份实体,只是所引用的变量名不同,地址其实还是相同的

现在我们不能让他们共用一块地址 所以要改为深拷贝

在这里插入图片描述
进入拷贝构造 也给他申请一块内存 和 构造一样

在这里插入图片描述
在这里插入图片描述

正常执行 没问题了

深拷贝,拷贝的时候先开辟出和源对象大小一样的空间,然后将源对象里的内容拷贝到目标对象中去,这样两个指针就指向了不同的内存位置。并且里面的内容是一样的,这样不但达到了我们想要的目的,还不会出现问题,两个指针先后去调用析构函数,分别释放自己所指向的位置。即为每次增加一个指针,便申请一块新的内存,并让这个指针指向新的内存,深拷贝情况下,不会出现重复释放同一块内存的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值