小学生学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/11/12 8:44:30 阅读更多 →
商标设计注册成功率从设计阶段就开始提高吗?

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

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

2026/11/14 7:34:21 阅读更多 →
DTC与状态掩码:高效管理多状态组合的位运算实践

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

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

2026/11/12 8:53:26 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/15 5:13:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/15 5:13:35 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/15 5:13:35 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/15 3:37:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/15 4:18:38 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/15 5:13:35 阅读更多 →

日新闻

周新闻

月新闻