c++深拷贝、浅拷贝

news2024/10/7 14:27:03

浅拷贝:简单的赋值拷贝包含指针拷贝

#include <iostream>
#include <string.h>
using namespace std;
//深拷贝、浅拷贝
//浅拷贝:简单的赋值拷贝包含指针拷贝
//深拷贝:在堆区重新申请的空间,进行拷贝操作

class Persion
{
public:
	Persion()
	{
		cout << "无参构造函数!" << endl;
	}

	Persion(int age,int height)
	{
		this->m_Age = age;
		cout << "有参构造函数!" << endl;
	
	}
	/*Persion(const Persion& p)
	{
		m_Height = p.m_Height;
		cout << "拷贝构造函数!" << endl;
	}*/

	~Persion()
	{
		cout << "默认析构函数!" << endl;
	}
	int m_Age = 0;
	int* m_Height;

};
Persion test01()
{
	Persion p1(10,20);

	Persion p2(p1);//调用拷贝构造函数,如果没有,编译器会提供一个默认的拷贝构造函数,这里发生的是浅拷贝
	cout << "p1的值:" << p1.m_Age << endl;
	cout << "p2的值:" << p2.m_Age << endl;
	return p2;
}
void main()
{
	test01();


}

深拷贝:在堆区重新申请的空间,进行拷贝操作

#include <iostream>
#include <string.h>
using namespace std;
//深拷贝、浅拷贝
//浅拷贝:简单的赋值拷贝包含指针拷贝
//深拷贝:在堆区重新申请的空间,进行拷贝操作

class Persion
{
public:
	Persion()
	{
		cout << "无参构造函数!" << endl;
	}

	Persion(int age, int height)
	{
		this->m_Age = age;
		//在堆区开辟空间
		m_Height = new int(height);
		cout << "有参构造函数!" << endl;

	}
	Persion(const Persion& p)
	{
		m_Age = p.m_Age;
		//当调用拷贝构造函数的时候,把拷贝对象的值在堆区重新开辟空间
		m_Height = new int(*p.m_Height);

	}
	~Persion()
	{
		//释放堆区内存
		if (m_Height != NULL) 
		{
			delete this->m_Height;
			this->m_Height = NULL;
		}

		cout << "默认析构函数!" << endl;
	}
	int m_Age = 0;
	int* m_Height;

};
Persion test01()
{
	Persion p1(10, 20);

	Persion p2(p1);//调用拷贝构造函数,如果没有,编译器会提供一个默认的拷贝构造函数
	cout << "p1的值m_Age:" << p1.m_Age << " p1的m_Height:" << p1.m_Height << " p1的m_Height:" << *p1.m_Height << endl;
	cout << "p2的值m_Age:" << p2.m_Age << " p2的m_Height:" << p2.m_Height << " p2的m_Height:" << *p2.m_Height << endl;
	return p2;
}
void main()
{
	Persion p = test01();


}

这里调用了三次析构函数 

 原理图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1003065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Java极简设计模式》第06章:适配器模式(Adapter)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 源码地址&#xff1a;https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

flex 布局:一行固定个数,超出换行(流式布局)

一、flex基础 设置在父容器上的属性&#xff1a;display&#xff1a;flex&#xff0c;align-items(交叉轴对齐方式)&#xff0c;justify-content(主轴对齐方式)&#xff0c;flex-wrap(换行)。 设置在子容器上的属性&#xff0c;通过 flex: 1&#xff0c;简写了 flex-grow、fl…

2023最新计算机信息管理毕设选题分享

文章目录 0 前言1 java web 管理系统 毕设选题2 java web 平台/业务系统 毕设选题3 游戏设计、动画设计类 毕设选题 (适合数媒的同学)4 算法开发5 数据挖掘 毕设选题6 大数据处理、云计算、区块链 毕设选题7 网络安全 毕设选题8 通信类/网络工程 毕设选题9 嵌入式 毕设选题10 开…

高性能数据JS网格 Bryntum Grid 5.5.2 Crack

高性能数据网格 Bryntum Grid 是一个高性能的网络表格组件。它是用纯 JavaScript 构建的&#xff0c;并且可以轻松地与所有主要 JS 框架集成。 功能丰富 Bryntum Grid 具有您期望从专业网格组件获得的所有功能&#xff0c;包括&#xff1a; 很好的表现;很好的绩效 没有人喜欢缓…

关于卫星电话的冷知识

卫星电话功率 卫星电话的发射功率取决于以下几个因素&#xff1a; 卫星的轨道高度&#xff1a;卫星的轨道高度越高&#xff0c;卫星电话与卫星之间的距离越远&#xff0c;信号衰减越大&#xff0c;因此需要更大的发射功率。一般来说&#xff0c;同步轨道卫星&#xff08;GEO&…

[每周一更]-(第61期):Rust入门策略(持续更新)

一门语言的学习&#xff0c;就要从最基本的语法开始认识&#xff0c;再分析不同语言的区别&#xff0c;再加上实战&#xff0c;才能更快的学会&#xff0c;领悟到作者的设计思想&#xff1b; 介绍 Rust编程练习 开发工具VSCode及插件 社区驱动的 rust-analyzerEven Better T…

再生龙clonezilla系统镜像下载

官网 Clonezilla - 簡介 下载

uniapp video全屏 cover-view 失效

查看官方文档 video | uni-app官网 确定自己开发的是app端 还是 微信小程序&#xff0c;我开发的是app端&#xff0c;所以在nvue文件写&#xff0c;同时cover-view组件要在video组件内容。 我写了一个简单的视频组件&#xff0c;可以看我另一篇博客。 uniapp video&#xff08…

Windows排查恶意程序及一些工具

目录 基础排查 使用系统配置实用程序 检查启动项 检查注册表 工具 网络监控 系统监控 安全检测 文件活动监控 其他 基础排查 使用系统配置实用程序 按下Win R键组合打开运行对话框&#xff0c;然后输入"msconfig"并按Enter键。在"服务"选项卡…

Cpolar+Emlog搭建指南—在Ubuntu上轻松创建个人博客,无需专业技能

前言 博客作为使用最广的个人在互联网的发声网站&#xff0c;在很长一段时间里&#xff0c;都被大家视作在互联网上发声的主要通道之一。虽然之后出现的即时聊天工具和朋友圈崛起&#xff0c;抢夺了不少博客的空间&#xff0c;但其仍占有不小的市场份额。也正因博客很重要&…

24、京东只换不修服务,电脑经常蓝屏申请只换不休记录

我在今年4.22号买了一台机械革命蛟龙k16&#xff0c;然后在后面的使用过程中&#xff0c;差不多就是20天左右蓝屏一次&#xff0c;问题是蓝屏的时候我也没干嘛&#xff0c;就是莫名其妙。 第一次蓝屏的时候是在看电影&#xff0c;突然就显示系统出现故障&#xff0c;准备重启&a…

星创易联加入低速无人驾驶产业联盟,为客户和社会创造更大价值!

原文&#xff1a;https://www.key-iot.com/companynews/2538.html 低速无人驾驶产业联盟受益于自动驾驶政策扶持、疫情催生需求等多方面因素影响&#xff0c;中国低速无人驾驶行业发展开始加速。是国内第一家也是唯一一个专注于低速无人驾驶领域的联盟组织&#xff0c;低速无人…

Python中的常见问题与解决方案

机器学习作为当今最热门的领域之一&#xff0c;为数据科学和人工智能带来了巨大的突破和进步。然而&#xff0c;在Python中进行机器学习和深度学习开发时&#xff0c;我们可能会遇到一些常见的问题。本文将分享一些这些常见问题&#xff0c;并给出解决方案&#xff0c;帮助您更…

2023年9月CSPM-3国标项目管理中级认证报名到这错不了

CSPM-3中级项目管理专业人员评价&#xff0c;是中国标准化协会&#xff08;全国项目管理标准化技术委员会秘书处&#xff09;&#xff0c;面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系&#xff0c;建立健全人才职业能力评价和激励机制的要…

Qt6 for Android(HarmonyOS)真机调试

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在《Qt6 for Android 环境搭建》一节中,我们详细地讲解了 JDK、Android SDK、NDK 的下载安装,以及这些工具在 Qt Creator 中配置。在 Android 环境搭建成功之后,我们还特地创建了两个 AVD(安卓虚拟设备)…

C++ - day2

1、封装一个结构体&#xff0c;完成存放学生成绩等功能 #include <iostream> #define MAX 50 using namespace std;struct Stu { private://学生成绩int score[MAX];//学生个数int num;public://设置学生个数void setNum(){cout<<"设置学生个数&#xff1a;&…

Python爬虫基础(一):urllib库的使用详解

文章目录 系列文章索引一、urllib库的使用1、基本介绍2、response的类型和关键方法3、下载文件4、GET请求实例&#xff08;1&#xff09;设置请求头&#xff08;百度&#xff09;&#xff08;2&#xff09;使用quote方法对get参数编码&#xff08;百度&#xff09;&#xff08;…

Retinexformer 论文阅读笔记

Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement 清华大学、维尔兹堡大学和苏黎世联邦理工学院在ICCV2023的一篇transformer做暗图增强的工作&#xff0c;开源。文章认为&#xff0c;Retinex的 I R ⊙ L IR\odot L IR⊙L假设干净的R和L&…

ARM架构源码编译RXTX LINUX JAVA串口开发项目部署

文章目录 手动编译源码原因源码下载编译源码编译中遇到的问题错误一&#xff1a;错误2错误3 安装成功后显示验证安装目录文件总结 手动编译源码原因 官网不提供ARM架构的依赖包 源码下载 wget http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7r2.zip解压 unzip rxtx-2.1-7r2.zip…

window gradle配置本地仓库与加速、复用本地仓库

文章目录 一、Gradle 的默认本地仓库二、window修改本地仓库1. 新建系统变量&#xff1a;2.Gradle Daemon配置&#xff0c;开启这个配置能有效的提高编译速度 idea修改gradle加速 一、Gradle 的默认本地仓库 默认gradle仓库位置为: C:\Users\用户名\.gradle 二、window修改本…