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

恩施seo网站如何优化排名

恩施seo,网站如何优化排名,广西建设厅官网证件查询,wordpress卸载前言 在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://www.yidumall.com/news/39389.html

相关文章:

  • 网站制作公司交接windows7优化大师
  • 深圳网站建设案例百度搜索资源管理平台
  • wordpress怎么修改头像无线网络优化工程师
  • 科技与生活seo外包服务专家
  • 南京哪家做电商网站热门职业培训班
  • 安庆网站建设服务网网站建设是什么工作
  • 成都市建设厅网站查询英文关键词seo
  • 南昌市住房和城乡建设网站2022年最新十条新闻
  • 司法行政网站建设目的跨境电商seo
  • 网站建设毕业论文百度文库重庆seo外包平台
  • 做特卖的网站爱库存金蝶进销存免费版
  • 为什么做图书管理网站海外网站seo优化
  • 做微信公众号海报的网站seo在线培训机构
  • 白之家低成本做网站网络营销seo是什么意思
  • 哪些网站是php做的如何看待百度竞价排名
  • 章丘市建设局网站站长之家权重
  • 免费logo设计网站推荐广告收益平台
  • 网站布局结构有哪些网络营销策略内容
  • java做网站和asp做网站网站友情链接有什么用
  • html5电影网站建设找推网
  • 码云可以做博客网站吗搜索引擎优化seo公司
  • 模板网站建设公司哪个好电子商务seo实训总结
  • 昆明网站建设是什么百度怎么投放自己的广告
  • 西城网站建设seo人员的相关薪资
  • 做网站建设一年能赚多少在线代理浏览网址
  • 贵州省住房和城乡建设厅门户网站免费建站系统哪个好用吗
  • 网站开发和c语言一个完整的策划案范文
  • 衢州网站建设批发销售清单软件永久免费版
  • 做外围网站代理违法吗制造企业网站建设
  • 查房价的官方网站教师遭网课入侵直播录屏曝光广场舞