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

C++之深拷贝和浅拷贝*

两者本质:


浅拷贝:简单的赋值拷贝操作

深拷贝:在堆区中重新申请空间,进行拷贝操作new & delete

注意事项:堆区是在地址中重新申请空间,所以后续一系列操作new delete是通过指针* age进行操作(解决拷贝操作中指针复制时,产生的堆区指针地址重复释放的问题)

 有参构造:指针需要手动开辟堆区new

 

 拷贝操作:

1.参数格式

2.开辟内容int *(主要看传入的是什么)

 

#include<iostream>
using namespace std;

class Person
{
public:

	int age;
	int *weight;

	//有参构造
	Person(int a,int w){
		age = a;
		weight = new int(w);    //指针属性要手动开辟new!!!!
		cout << "有参构造" << endl;
	}

	//拷贝操作
	//const防止对引用数据的意外修改
	Person(const Person &p)
	{
		//浅拷贝
		/*age = p.age;
		weight = p.weight;*/

		//深拷贝
		age = p.age;
		weight = new int(*p.weight);//new一个体重指针int大小的堆区
	}

	//析构函数
	~Person()
	{
		if (weight != NULL)
		{
			delete weight;
			weight = NULL;
		}
		cout << "Person析构函数调用" << endl;
	}

	
};
//int main()
//{
//	Person p1(22, 90);
//	cout << "p1的年龄和体重" << p1.age << " " << *p1.weight << endl;
//
//	Person p2(p1);
//	cout << "p2的年龄和体重" << p2.age << " " << *p2.weight << endl;
//
//
//	system("pause");
//	return 0;
//}


http://www.kler.cn/a/313762.html

相关文章:

  • 相机光学(四十二)——sony的HDR技术
  • 界面控件Kendo UI for Angular中文教程:如何构建带图表的仪表板?(一)
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何查看PDS系统的自阻抗操作指导
  • Flink_DataStreamAPI_输出算子Sink
  • 计算机网络易混淆知识点串记
  • AI写作(二)NLP:开启自然语言处理的奇妙之旅(2/10)
  • Linux —— 多线程
  • 三分钟 ChatGPT 接入钉钉机器人
  • 云服务器和物理服务器的区别在哪
  • 第一次安装Pytorch
  • python爬虫初体验(二)
  • Android横竖屏 mdpi hdpi xhdpi xxhdpi xxxhdpi
  • .ideavimrc在idea打不开
  • 基于NLP的对话系统开发:从零构建智能客服机器人
  • Android 如何使用jdk命令给应用/APK重新签名。
  • 云栖大会Day1:云应用开发平台 CAP 来了
  • pythonnet python图像 C# .NET图像 互转
  • FLUX.1+ComfyUI部署与使用:图像合成技术的新高度
  • 【JAVA开源】基于Vue和SpringBoot的在线文档管理系统
  • oracle dblink的使用并举例
  • Spring AOP的应用
  • 【计算机网络 - 基础问题】每日 3 题(十三)
  • 面试八股--stram 中map和flatmap的区别
  • 关于 NLP 深度学习的核心流程
  • 虚拟现实与PD协议快充
  • thinkphp 做分布式服务+读写分离+分库分表(分区)(后续接着写)