当前位置: 首页 > news >正文

dw手机网站建设今日新闻热点

dw手机网站建设,今日新闻热点,上海最大广告公司有哪些,上海人才网站建设目录 什么是浅拷贝?浅拷贝的问题使用深拷贝解决浅拷贝问题结束语 什么是浅拷贝? 如果在一个类中没有人为定义拷贝函数,则系统会提供默认拷贝函数。那么在此默认拷贝函数中主要进行了简单的赋值操作,那这个简单的赋值操作我们一般…

目录

      • 什么是浅拷贝?
      • 浅拷贝的问题
      • 使用深拷贝解决浅拷贝问题
      • 结束语

什么是浅拷贝?

如果在一个类中没有人为定义拷贝函数,则系统会提供默认拷贝函数。那么在此默认拷贝函数中主要进行了简单的赋值操作,那这个简单的赋值操作我们一般叫做浅拷贝。

浅拷贝的问题

浅拷贝具体有什么问题,我们先看一个示例,如下所示:

class Student
{
public:Student(const char *name, int Age){pName = (char*)malloc(strlen(name) + 1);strcpy(pName, name);age = Age;}~Student(){cout << "析构函数" <<endl;if (pName != NULL){free(pName);pName = NULL;}}
public:char *pName;int age;
};void test02()
{Student s1("小花", 18);Student s2(s1);cout << "s1 Name=" << s1.pName << " s1 age=" << s1.age << endl;cout << "s2 Name=" << s2.pName << " s2 age=" << s2.age << endl;
}

代码运行结果如下:
在这里插入图片描述

如上图所示,代码并不能正常运行,我们接下来分析原因。

Student s1("小花", 18);

首先我们先实例化对象,并且该对象名为s1,在实例化对象过程中会进行如下几步:

  1. 申请一块内存空间用来存放公有变量pName和age。
  2. 调用构造函数,在堆中申请一块内存空间,将指针name所指向的内容赋值给刚刚在堆中申请的内存空间,则该空间内容为“小花”
  3. 将Age赋值给age。
    最终如下所示:
    在这里插入图片描述
Student s2(s1);

当执行这条语句时,会调用拷贝构造函数,但是我们在类中并没有设定拷贝构造,故会调用系统默认的拷贝构造函数,即浅拷贝。即s2.pName = s1.pName,s2.age = s1.age。如下图所示:
在这里插入图片描述

此时当执行完test02函数时,会调用s1的析构函数和s2的析构函数。我们接下来分析下:


调用s1的析构函数时,会判断pName指向的空间存不存在,如果存在,即释放掉该空间,并将pName指针指向空。同样的操作,当执行s2的析构函数时,也会判断pName指向的空间存不存在,如果存在,则释放掉该空间,但是此时出现一个问题,pName指向的那块空间在执行s1析构函数时已经释放掉了,即再次释放空间时,会出现错误。这就是浅拷贝的问题,也是上述代码没有正常运行的根本原因(同一块空间被释放两次)。


使用深拷贝解决浅拷贝问题

在之前的示例中因为我们没有人为定义拷贝构造函数,使得自动调用了系统的默认拷贝构造函数,才造成同一块内存空间被同时释放两次的现象。那么为了解决这个问题,我们可以通过自己写拷贝构造函数来解决这个问题。

先上代码:

//深拷贝Student(const Student &stu){cout << "自己的拷贝构造函数" << endl;//1.申请空间pName = (char*)malloc(strlen(stu.pName) + 1);//2.拷贝数据strcpy(pName, stu.pName);age = stu.age;}

在这里插入图片描述

运行代码结果如下:
在这里插入图片描述

结束语

如果觉得这篇文章还不错的话,记得点赞 ,支持下!!!

http://www.hkea.cn/news/420066/

相关文章:

  • 夸克看网站要钱吗电商网站seo优化
  • 自己做网站排版138ip查询网域名解析
  • 东莞做网站 南城石佳2023网站推广入口
  • 广东省省建设厅网站郴州网站建设网络推广平台
  • 校园网站推广方案怎么做应用商店优化
  • 巩义网站建设网络营销公司是做什么的
  • 做网站基本教程一站式营销平台
  • 杭州模板网站建设电脑培训网上培训班
  • 大连做网站不错的公司怎样把广告放到百度
  • 网站上面带官网字样怎么做的网站设计的流程
  • 有个网站是做视频相册的网球排名即时最新排名
  • 论坛网站备案流程图优化大师怎么提交作业
  • 织梦政府网站模板百度在线入口
  • 专业做婚纱摄影网站会员制营销
  • 网站内容丰富互动营销平台
  • 阿里巴巴logo高清图谷歌seo网站推广
  • 网站如何做内链seo高手是怎样炼成的
  • 设计师个人网站建设怎样注册一个自己的平台
  • 徐州营销网站建设产品线上推广渠道
  • 绍兴市网站建设公司企业官网搭建
  • 关于网页设计的网站免费发布信息网站大全
  • 郑州新闻头条seo基础教程
  • 做网站比较大的公司朔州seo
  • 如何制作私人网站福州专业的seo软件
  • 做网站主流技术南宁在哪里推广网站
  • 老板让我做网站负责人微博营销软件
  • 教我做网站百度打开
  • 网站开发时如何兼容电商运营是做什么的
  • 河北建设银行石家庄分行招聘网站怎么申请自己的网络平台
  • vs2008 做网站搜索引擎的工作原理是什么