C++ 拷贝构造  拷贝赋值 到底在干什么?——从对象出生到 RAII 思想
很多初学 C 的人在学习到“拷贝构造函数”和“拷贝赋值运算符”时都会产生一个疑问这两个东西到底有什么意义为什么要分两种Java 里也没这么复杂啊如果只是记语法很快就会忘。真正理解它们必须从对象生命周期 资源所有权这个角度来看。一、先说结论一句话版拷贝构造定义“新对象如何复制资源”拷贝赋值定义“已有对象如何安全替换资源”它们的存在是为了防止内存泄漏双重释放野指针资源混乱二、什么叫对象的“出生”和“换内容”在 C 中对象有三个关键动作行为示例代码调用函数出生Student a;默认构造函数用别人出生Student b a;拷贝构造已出生再换内容b a;拷贝赋值区别的关键只有一个左边这个对象在执行时是否已经存在。三、为什么要区分这两种如果类里只有int / float / bool这种基础类型class A { int x; };你几乎感觉不到区别因为编译器自动生成的函数足够安全。但一旦类里出现“资源”问题就来了。四、什么是“资源”资源不只是内存包括new出来的堆内存文件句柄socket线程锁OpenGL / GPU 资源JNI 句柄Binder 句柄数据库连接这些统称为资源句柄Resource Handle五、一个真实会炸的例子class Student { public: char* name; };Student a(Tom); Student b a;如果你没有写拷贝构造默认行为是“浅拷贝”a.name -- 0x1000 b.name -- 0x1000两个对象指向同一块内存。当析构时delete a.name; delete b.name; // 双重释放程序崩溃六、拷贝构造的意义拷贝构造的作用是创建新对象时决定是“共享资源”还是“深拷贝资源”。正确深拷贝后a.name -- 0x1000 b.name -- 0x2000每个对象有自己的一份资源。七、拷贝赋值的意义Student a(Tom); Student b(Jack); b a;如果没有写operatorb.name 原来指向 0x3000 直接变为 0x1000 0x3000 永远丢失 → 内存泄漏正确流程应该是判断自赋值释放旧资源深拷贝新资源返回自身引用八、为什么不能只用一个函数因为两种场景的“内存状态”不同场景对象是否存在是否需要清理旧资源拷贝构造不存在不需要拷贝赋值已存在必须清理这就是为什么 C 必须拆成两个函数。九、这就引出了 RAII 思想RAII 全称Resource Acquisition Is Initialization资源获取即初始化核心思想对象出生 → 获取资源对象复制 → 定义资源复制规则对象替换 → 定义资源替换规则对象死亡 → 释放资源也就是资源的生命周期 对象的生命周期十、为什么 Java 没有这些概念因为JavaCGC 自动回收手动管理引用语义值语义 所有权没析构析构至关重要在 C 中你就是 GC你就是内存管理员。十一、工程级总结函数真正意义拷贝构造新对象如何拥有资源拷贝赋值已有对象如何替换资源析构函数对象死亡如何释放资源三者合一RAII 生命周期模型十二、可以记住的一句话构造是出生赋值是换脑子析构是死亡。三者合在一起构成 C 的资源生命周期管理体系。当你理解这一点时你就从“语法学习者”进入了“对象模型工程师”的阶段。

相关新闻

智慧农业卡达巴香蕉成熟度识别分割数据集labelme格式702张3类别

智慧农业卡达巴香蕉成熟度识别分割数据集labelme格式702张3类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数):702标注数量(json文件个数):702标注类别数:3标注类别名称:["ripe","overripe","underripe&…

2026/7/3 15:21:44 阅读更多 →
重磅!2026版北大核心期刊目录换届正式启动!预计26年底或27年初会发布

重磅!2026版北大核心期刊目录换届正式启动!预计26年底或27年初会发布

2026年北大中文核心换届中文核心期刊要目总览官网悄悄更新了一条信息。于1月16日举行2026年版《中文核心期刊要目总览》编委会暨学术研讨会。北大核心期刊目录变动注意事项面对北大核心期刊目录的变动,小编提醒2026年准备投稿核心期刊的作者们,应该注意以…

2026/7/3 15:21:45 阅读更多 →
MySQL分库分表:突破大表瓶颈,迈向性能巅峰

MySQL分库分表:突破大表瓶颈,迈向性能巅峰

一、引言:大表困境与分库分表曙光 在当今数字化时代,数据量呈爆发式增长,MySQL 作为一款广泛应用的关系型数据库,在面对单表数据量过大时,常常陷入性能瓶颈的泥沼。想象一下,一张订单表记录了电商平台数年…

2026/7/3 15:21:48 阅读更多 →

最新新闻

STM32与TI降压转换器的嵌入式电源系统设计

STM32与TI降压转换器的嵌入式电源系统设计

1. 项目背景与硬件选型解析在嵌入式电源系统设计中,DC-DC降压转换是一个基础但至关重要的环节。我们选用STM32F217ZG作为主控芯片搭配171010550电源管理IC的方案,主要基于以下工程考量:STM32F217ZG这颗Cortex-M3内核的MCU具备:120…

2026/7/3 19:26:57 阅读更多 →
DDrawCompat:Windows 10/11经典游戏兼容性修复终极指南

DDrawCompat:Windows 10/11经典游戏兼容性修复终极指南

DDrawCompat:Windows 10/11经典游戏兼容性修复终极指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDraw…

2026/7/3 19:24:57 阅读更多 →
4-20mA电流环技术与工业自动化应用解析

4-20mA电流环技术与工业自动化应用解析

1. 4-20mA电流环基础与行业应用场景工业自动化领域广泛采用4-20mA电流环作为标准信号传输方式,这种看似简单的技术背后蕴含着深厚的工程智慧。电流环之所以成为工业控制领域的"普通话",主要基于三个核心优势:抗干扰能力、远距离传输…

2026/7/3 19:22:57 阅读更多 →
如何用ChanlunX插件在通达信中实现缠论自动化分析:新手终极指南

如何用ChanlunX插件在通达信中实现缠论自动化分析:新手终极指南

如何用ChanlunX插件在通达信中实现缠论自动化分析:新手终极指南 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾在股票K线图中迷失方向,面对复杂的缠论理论不知从何下手&a…

2026/7/3 19:22:57 阅读更多 →
ICM-42688-P与STM32F031C6的高精度运动感知方案解析

ICM-42688-P与STM32F031C6的高精度运动感知方案解析

1. 高精度运动感知方案的核心器件解析在机器人技术、工业自动化和振动监测领域,精确的运动感知是实现智能控制的基础。ICM-42688-P作为TDK InvenSense推出的6轴MEMS运动跟踪设备,配合STM32F031C6微控制器,构成了一个高性价比的嵌入式运动感知…

2026/7/3 19:22:57 阅读更多 →
STM32L021K4与DS28EC20实现低功耗用户配置存储方案

STM32L021K4与DS28EC20实现低功耗用户配置存储方案

1. 为什么选择DS28EC20与STM32L021K4组合保存用户配置在嵌入式系统中保存用户设置和偏好,最常见的方案是使用EEPROM。DS28EC20作为Maxim(现ADI)推出的1-Wire接口EEPROM,与STM32L021K4这款超低功耗MCU的搭配,在功耗敏感…

2026/7/3 19:20:56 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻