大数据 SLAM drupal nlp upload vue过滤器 bootstrap模板 angularjs视频教程 git视频教程 jquery循环 art神经网络 oracle数据库版本 安卓虚拟机运行windows mysql重启 python异常 python安装程序 java9 java简介 java发邮件 java在线课程 java获取当前ip java获得当前日期 java中的map java网页 java日期转时间戳 python视频教程 python教程视频 莫愁脚本 swing布局 python输入数字 快点蛆虫成就单刷 0x8002801c cmd代码 一件换肤 ad下载 skycc组合营销软件 R语言初学者指南 保留小数点后两位 男网红头像 layout下载
当前位置: 首页 > 学习教程  > 编程学习

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

2021/1/9 2:04:44 文章标签: 深浅拷贝

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

导语:

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

深浅拷贝

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

先来看一个类

在这里插入图片描述

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

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

在这里插入图片描述

死掉了 why?

一步一步的看

在这里插入图片描述

在这里插入图片描述

再来看看这个拷贝构造

在这里插入图片描述

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

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

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

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

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

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

正常执行 没问题了

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


本文链接: http://www.dtmao.cc/news_show_1100277.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?