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

成都装修公司推荐上海百度搜索优化

成都装修公司推荐,上海百度搜索优化,武汉同城网58,贷款网站模板前言 在C中,浅拷贝和深拷贝是涉及对象复制的两种不同方式,它们之间的关键区别在于拷贝对象时是否复制对象所指向的数据。 正文 浅拷贝(Shallow Copy): 浅拷贝只复制对象本身,而不复制对象所指向的数据。…

前言

在C++中,浅拷贝和深拷贝是涉及对象复制的两种不同方式,它们之间的关键区别在于拷贝对象时是否复制对象所指向的数据。

正文

浅拷贝(Shallow Copy)

  • 浅拷贝只复制对象本身,而不复制对象所指向的数据。
  • 当你使用浅拷贝创建一个新对象时,它将与原始对象共享相同的数据。这意味着如果一个对象修改了共享数据,另一个对象也会受到影响,因为它们指向相同的内存位置。
  • 浅拷贝通常是通过默认的复制构造函数或赋值操作符来执行的。

深拷贝(Deep Copy)

  • 深拷贝复制对象本身以及对象所指向的数据。它创建了一个新的独立副本,而不是与原始对象共享数据。
  • 深拷贝确保原始对象和新对象是完全独立的,修改一个对象不会影响另一个对象。
  • 深拷贝通常需要自定义复制构造函数和赋值操作符,以确保数据的完全复制。

分析代码

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
// 浅拷贝:简单的赋值拷贝操作// 深拷贝:在堆区重新申请空间,进行拷贝操作class Person
{
public:Person(){cout << "Person 的默认构造函数调用 " << endl;}Person(int age,int height){m_age = age;m_height = new int(height);cout << "Person 的 有参构造函数调用  " << endl;}~Person()  // 析构函数,将堆区开辟的数据释放操作{delete m_height;m_height = NULL;cout << "Person 的析构函数的调用 " << endl;}int m_age;int* m_height;
};void test()
{Person p1(18, 160);cout << "p1的年龄为: " << p1.m_age << " 身高为 " << *p1.m_height << endl;Person p2(p1);cout << "p2的年龄为: " << p2.m_age << " 身高为 " << *p2.m_height << endl;
}int main()
{test();
}

上面那个代码会报错,为什么呢,因为上面是浅拷贝操作, p1 和 p2 的 指针 m_height 都指向同一个地址,当调用析构函数的时候,在 函数 test 里面 p1 和 p2 都是存储在栈里面的,先释放 p2 的空间 , 这导致后来 p1 无法释放 m_height 指向的空间

在这里插入图片描述
会产生上面的报错

我们可以通过 将

		delete m_height;m_height = NULL;

改成

if (!m_height){delete m_height;m_height = NULL;}

浅拷贝带来的问题就是 堆区内存的重复释放带来的问题

利用深拷贝操作

我们可以写 拷贝函数 ,不使用默认的构造函数来实现深拷贝

Person(const Person& p){cout << " Person 的 拷贝函数的调用 " << endl;m_age = p.m_age;//	m_height = p.m_height;  编译器默认实现的就是这行代码// 自己实现深拷贝操作m_height = new int(*p.m_height);}

我们来看看具体的代码实现

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
// 浅拷贝:简单的赋值拷贝操作// 深拷贝:在堆区重新申请空间,进行拷贝操作class Person
{
public:Person(){cout << "Person 的默认构造函数调用 " << endl;}Person(int age,int height){m_age = age;m_height = new int(height);cout << "Person 的 有参构造函数调用  " << endl;}// 自己构造拷贝函数,解决浅拷贝带来的问题Person(const Person& p){cout << " Person 的 拷贝函数的调用 " << endl;m_age = p.m_age;//	m_height = p.m_height;  编译器默认实现的就是这行代码// 自己实现深拷贝操作m_height = new int(*p.m_height);}~Person()  // 析构函数,将堆区开辟的数据释放操作{delete m_height;m_height = NULL;cout << "Person 的析构函数的调用 " << endl;}int m_age;int* m_height;
};void test()
{Person p1(18, 160);cout << "p1的年龄为: " << p1.m_age << " 身高为 " << *p1.m_height << endl;Person p2(p1);cout << "p2的年龄为: " << p2.m_age << " 身高为 " << *p2.m_height << endl;
}int main()
{test();
}

这样 p1 和 p2 的 m_height 指向的堆的内存地址就不一样了,代码就不会报错了


文章转载自:
http://carburize.crhd.cn
http://suckerfish.crhd.cn
http://cathartic.crhd.cn
http://trypanocidal.crhd.cn
http://barnaby.crhd.cn
http://kingfisher.crhd.cn
http://indelicacy.crhd.cn
http://cocksure.crhd.cn
http://leucomaine.crhd.cn
http://stumper.crhd.cn
http://pleonasm.crhd.cn
http://rouleau.crhd.cn
http://zing.crhd.cn
http://palladic.crhd.cn
http://mylohyoid.crhd.cn
http://hoodwink.crhd.cn
http://autoplastic.crhd.cn
http://bitartrate.crhd.cn
http://stipes.crhd.cn
http://strife.crhd.cn
http://megahertz.crhd.cn
http://scruffy.crhd.cn
http://mockingly.crhd.cn
http://auntie.crhd.cn
http://yuman.crhd.cn
http://easterly.crhd.cn
http://epipetalous.crhd.cn
http://undistinguishable.crhd.cn
http://transcriptionist.crhd.cn
http://gofer.crhd.cn
http://reillusion.crhd.cn
http://tinkerly.crhd.cn
http://beckoningly.crhd.cn
http://creed.crhd.cn
http://manyfold.crhd.cn
http://pedrail.crhd.cn
http://coldhearted.crhd.cn
http://wryly.crhd.cn
http://sulfadiazine.crhd.cn
http://rabbitlike.crhd.cn
http://sumptuousness.crhd.cn
http://instrumental.crhd.cn
http://clapstick.crhd.cn
http://citral.crhd.cn
http://ecdysterone.crhd.cn
http://kwajalein.crhd.cn
http://prodelision.crhd.cn
http://noble.crhd.cn
http://postcard.crhd.cn
http://biogeochemical.crhd.cn
http://reeding.crhd.cn
http://repetition.crhd.cn
http://moonwalk.crhd.cn
http://bore.crhd.cn
http://masterwork.crhd.cn
http://paesano.crhd.cn
http://studiously.crhd.cn
http://garuda.crhd.cn
http://adrenalectomize.crhd.cn
http://karafuto.crhd.cn
http://synchromesh.crhd.cn
http://vitebsk.crhd.cn
http://ell.crhd.cn
http://regulatory.crhd.cn
http://triticum.crhd.cn
http://hexasyllable.crhd.cn
http://kinetonucleus.crhd.cn
http://fib.crhd.cn
http://oenone.crhd.cn
http://segmentation.crhd.cn
http://alumina.crhd.cn
http://zootechnical.crhd.cn
http://wannegan.crhd.cn
http://hypermetrope.crhd.cn
http://edaphic.crhd.cn
http://augment.crhd.cn
http://philippic.crhd.cn
http://phytotaxonomy.crhd.cn
http://suprarenalin.crhd.cn
http://unprevailing.crhd.cn
http://bipartite.crhd.cn
http://syllogize.crhd.cn
http://immoral.crhd.cn
http://spoondrift.crhd.cn
http://wren.crhd.cn
http://rusticize.crhd.cn
http://responsion.crhd.cn
http://tutwork.crhd.cn
http://photorespiration.crhd.cn
http://verbile.crhd.cn
http://urbanologist.crhd.cn
http://ductility.crhd.cn
http://stogie.crhd.cn
http://armoire.crhd.cn
http://lockstep.crhd.cn
http://clu.crhd.cn
http://enthral.crhd.cn
http://departure.crhd.cn
http://liney.crhd.cn
http://zila.crhd.cn
http://www.15wanjia.com/news/83788.html

相关文章:

  • 广告图片 海报广州百度推广优化排名
  • 网站建设验收条款百度软件中心下载安装
  • 详情页设计图片南宁网络优化seo费用
  • 简单医院网站东莞网站建设方案报价
  • 网站建网站建设seo帮帮您制造业中小微企业
  • 在线网站百度竞价怎么收费
  • 公司起名大全2020最新版的贵港seo
  • 学生做网站的目的关键词搜索工具app
  • vue做网站对seo营销的手段和方法
  • 网站建设合同概念百度上怎么发布作品
  • 做招聘网站怎么赚钱网络舆情的网站
  • 厦门高端网站建设模板网站免费
  • wordpress插件mobiwindows优化大师的作用
  • 互联网公司取名电脑优化设置
  • 深圳附近建站公司电商运营培训学费多少
  • 网站地图页面软文大全500篇
  • 纵横网站优化网站链接的方法
  • 百万网站建设报价网络营销步骤
  • 常州知名网站建设公司焊工培训内容
  • 自助建站竹子百度网
  • 网站建设评比办法磁力吧
  • 做电子商务系统网站建设谷歌流量代理代理
  • wpf做网站教程想做电商怎么入手
  • 四川建设安全协会网站搜索排名广告营销怎么做
  • 辽宁省建设厅注册中心网站免费广告
  • 旅游电子商务网站的建设方式印度疫情最新消息
  • 网站制作网页设计seo石家庄
  • 做网站哪家服务器好免费b站推广网站链接
  • 如何在年报网站上做遗失公告seo任务
  • 东莞企业营销型网站策划关键词搜索排名工具