小学生学C++编程语法知识(C++中的深拷贝与浅拷贝)
C中的深拷贝与浅拷贝——给同学们讲一下“复制魔法”同学们今天我们学习一个非常重要的C知识当我们复制一个对象时到底是复制“外表”还是复制“里面的东西”这就是浅拷贝Shallow Copy深拷贝Deep Copy它们主要和指针动态内存new类对象复制有关。一、先理解什么叫“拷贝”生活中小明有一本《C魔法书》。小红说“我也想要一本一样的。”于是小明复制了一本。这就是复制 拷贝C里面Student a; Student b a;意思把对象a复制给对象b。例如int a 10; int b a;结果a: 10 b: 10两个数字互不影响。如果b 20;那么a: 10 b: 20没有问题。因为int里面保存的是数据本身。二、问题出现指针看一个例子int a 100; int *p a;内存a ┌─────┐ │100 │ └─────┘ ↑ | p指针p保存的是地址不是100。现在int *q p;发生什么100 ┌─────┐ │ │ └─────┘ ↑ ↑ | | p qp和q指向同一个地方。这就是浅拷贝三、什么是浅拷贝一句话只复制地址不复制真正的数据。比如class Student { public: int age; int *score; };创建Student s1; s1.age 10; s1.score new int(100);内存s1 age ┌────┐ │10 │ └────┘ score | ↓ ┌─────┐ │100 │ └─────┘现在Student s2 s1;默认拷贝C会这样s2.age s1.age s2.score s1.score结果s1.score | ↓ ┌─────┐ │100 │ └─────┘ ↑ | s2.score两个指针指向同一个100。四、浅拷贝有什么问题看代码#includeiostream using namespace std; class Student { public: int *score; Student() { score new int(100); } ~Student() { delete score; } }; int main() { Student a; Student b a; }发生什么创建aa.score | ↓ 100复制ba.score | ↓ 100 ↑ | b.score程序结束先销毁bdelete score;100被释放。然后销毁a再次delete score;可是这个内存已经没有了这叫重复释放可能导致程序崩溃内存错误五、什么是深拷贝深拷贝一句话不仅复制地址而是重新复制一份数据。还是刚才例子a:a.score | ↓ 100复制Student ba;深拷贝以后a.score | ↓ ┌─────┐ │100 │ └─────┘ b.score | ↓ ┌─────┐ │100 │ └─────┘注意两个100是两块不同的内存。六、如何实现深拷贝需要自己写拷贝构造函数格式类名(const 类名 对象) { }例如#includeiostream using namespace std; class Student { public: int *score; Student() { score new int(100); } //拷贝构造函数 Student(const Student s) { score new int(*s.score); } ~Student() { delete score; } }; int main() { Student a; Student ba; }关键score new int(*s.score);拆开第一步取出原来的值*s.score得到100第二步重新申请空间new int(100)得到新的100所以两个对象互不影响。七、浅拷贝 vs 深拷贝比较浅拷贝深拷贝复制什么地址数据速度快慢是否申请新空间否是两个对象是否共享数据是否容易出错吗容易安全需要自己写吗默认提供通常自己写八、生活中的比喻浅拷贝小明有一个遥控汽车。小红复制拿了一张纸写遥控汽车的位置小明家这不是复制汽车。只是复制地址。深拷贝小红重新买了一辆一模一样的汽车。现在小明玩自己的。小红玩自己的。互不影响。九、什么时候需要深拷贝主要情况类里面有指针例如class Array { int *data; };或者动态数组int *arrnew int[100];或者字符串char *name;都需要考虑深拷贝。十、C中的“三件套”如果一个类管理动态内存通常需要1. 构造函数申请空间new2. 拷贝构造函数负责深拷贝3. 析构函数释放空间delete这三个叫Rule of Three三法则十一、给同学们的记忆口诀普通变量直接复制。 指针变量要看地址。 复制地址是浅拷贝。 复制数据是深拷贝。 new出来的东西 一定要小心释放。十二、信奥竞赛中的理解在GESP、CSP-J阶段通常intdoublecharstringvector已经帮我们处理好了。例如vectorint a; vectorint ba;这里不是简单复制地址。vector内部已经实现了深拷贝。所以b[0]100;不会影响a[0]但是学习链表二叉树动态数组智能指针时深浅拷贝就是必须掌握的核心知识。一句话总结浅拷贝复制“钥匙”地址深拷贝复制“房子”数据。指针越多越要小心浅拷贝。

相关新闻

基于YOLO+DeepSeek的疲劳驾驶检测系统 YOLO+DeepSeek+疲劳驾驶检测系统 Pytorch+SpringBoot+Flask+Vue

基于YOLO+DeepSeek的疲劳驾驶检测系统 YOLO+DeepSeek+疲劳驾驶检测系统 Pytorch+SpringBoot+Flask+Vue

YOLO+DeepSeek+疲劳驾驶检测系统PytorchSpringBootFlaskVue 配置好环境可直接使用,也可以自己加数据集训练,运行效果见图像及视频。 共4类标签[“睁眼”,“闭眼”,“打哈欠”,“未打哈欠”]系统亮点: 多场景检测&#…

2026/8/5 8:17:35 阅读更多 →
商标设计注册成功率从设计阶段就开始提高吗?

商标设计注册成功率从设计阶段就开始提高吗?

商标设计注册成功率能从设计阶段就开始提高吗?答案是肯定的。很多创业者直到被驳回才明白:商标注册的成功率,在设计阶段就已注定。 那些绕开雷区的品牌不是运气好,而是把功课做在了前面。本文拆解4个设计阶段的关键策略&#xff0…

2026/8/5 8:17:35 阅读更多 →
DTC与状态掩码:高效管理多状态组合的位运算实践

DTC与状态掩码:高效管理多状态组合的位运算实践

1. 项目概述:从“状态”的混乱到“掩码”的秩序 在任何一个涉及对象状态管理的系统里,无论是游戏开发中的角色属性、电商订单的生命周期,还是设备监控中的运行模式,我们都会遇到一个经典问题:如何高效、清晰地表达和操…

2026/8/5 8:17:35 阅读更多 →

最新新闻

内网NTP服务搭建全攻略:从协议原理到高可用部署

内网NTP服务搭建全攻略:从协议原理到高可用部署

1. 项目缘起:为什么内网必须有自己的“钟表匠” 在分布式系统、虚拟化集群、数据库主从复制乃至日常的日志分析中,时间戳的一致性不是锦上添花,而是基石。我曾经历过一次惨痛的教训:一个由十几台服务器组成的微服务集群&#xff0…

2026/8/5 9:00:53 阅读更多 →
Ollama本地大模型部署指南:从零到一实现私有化AI助手

Ollama本地大模型部署指南:从零到一实现私有化AI助手

1. 项目概述:为什么选择Ollama进行本地大模型部署?最近和不少同行聊天,发现大家对于“本地部署大模型”这件事,心态挺矛盾的。一方面,受够了公有云API的调用限制、网络延迟,以及时不时就冒出来的“服务不可…

2026/8/5 9:00:53 阅读更多 →
工业通信基石:Modbus TCP协议解析与实战开发指南

工业通信基石:Modbus TCP协议解析与实战开发指南

1. 项目概述:为什么Modbus TCP依然是工业通信的基石干了十几年自动化,从现场接线到上位机开发,通信协议这块算是踩坑无数。今天想聊的Modbus TCP,乍一看是个老掉牙的话题,网上资料一抓一大把。但有意思的是&#xff0c…

2026/8/5 9:00:53 阅读更多 →
wangEditor自定义上传功能深度解析:从基础配置到云存储集成

wangEditor自定义上传功能深度解析:从基础配置到云存储集成

1. 项目概述:为什么需要自定义上传?在富文本编辑器的日常开发中,上传图片和视频几乎是绕不开的核心功能。无论是内容管理系统、博客后台还是社区发帖,用户都期望能像使用Word一样,轻松地拖拽或选择文件,然后…

2026/8/5 9:00:53 阅读更多 →
Waymo运动数据集实战:轨迹预测与行为理解核心指南

Waymo运动数据集实战:轨迹预测与行为理解核心指南

1. 项目概述:Waymo Motion Open Dataset 是什么?如果你正在研究自动驾驶的预测、规划或者行为理解,那么Waymo Motion Open Dataset(简称WMOD)绝对是一个绕不开的宝藏。它不是我们常见的感知数据集,比如标注…

2026/8/5 9:00:53 阅读更多 →
如何在Windows家庭版上免费解锁专业远程桌面功能

如何在Windows家庭版上免费解锁专业远程桌面功能

如何在Windows家庭版上免费解锁专业远程桌面功能 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows家庭版无法使用远程桌面功能而烦恼吗?RDP Wrapper Library是你的完美解决方案&#xff01…

2026/8/5 8:59:52 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →