上海seo网站排名优化公司手机网站建设方法

张小明 2026/1/2 13:23:33
上海seo网站排名优化公司,手机网站建设方法,网站建设需要多少,天元建设集团怎么样#x1f504; C 赋值运算符重载#xff1a;深拷贝 vs 浅拷贝的生死线#xff01;大家好#xff01;今天我们来聊一个 C 中极易被忽视、却可能引发严重 bug 的知识点——赋值运算符 operator 的重载。你可能写过 a b#xff0c;但当你的类中包含指向堆内存的指针时#x… C 赋值运算符重载深拷贝 vs 浅拷贝的生死线大家好今天我们来聊一个 C 中极易被忽视、却可能引发严重 bug 的知识点——赋值运算符operator的重载。你可能写过a b但当你的类中包含指向堆内存的指针时这个看似简单的等号就可能让你的程序崩溃、内存泄漏甚至“神秘地”修改不该改的数据别慌今天我们就用一段经典示例彻底搞懂为什么需要重载赋值运算符以及如何正确实现深拷贝。 编译器默认给你的 4 个函数在 C 中即使你什么都没写编译器也会悄悄为你的类生成以下 4 个函数默认构造函数无参空实现默认析构函数无参空实现默认拷贝构造函数逐成员值拷贝**默认赋值运算符operator**也是逐成员值拷贝⚠️ 问题来了“值拷贝”对指针来说就是“浅拷贝” 浅拷贝的灾难多个对象共用一块堆内存来看你写的Person类代码原样保留未作任何修改class Person { public: Person(int age) { // 将年龄数据开辟到堆区 m_Age new int(age); } // 重载赋值运算符 Person operator(Person p) { if (m_Age ! NULL) { delete m_Age; m_Age NULL; } // 编译器提供的代码是浅拷贝 // m_Age p.m_Age; // 提供深拷贝 解决浅拷贝的问题 m_Age new int(*p.m_Age); // 返回自身 return *this; } ~Person() { if (m_Age ! NULL) { delete m_Age; m_Age NULL; } } // 年龄的指针 int *m_Age; };如果不重载operator会发生什么假设使用默认赋值p2 p1; // 默认m_Age p1.m_Age 浅拷贝结果p1.m_Age和p2.m_Age指向同一块堆内存当p1或p2析构时delete这块内存另一个对象再访问或析构 →野指针 / 重复释放 → 程序崩溃这就是典型的浅拷贝陷阱。✅ 正确做法手动实现深拷贝你的重载版本完美解决了这个问题Person operator(Person p) { if (m_Age ! NULL) { delete m_Age; m_Age NULL; } m_Age new int(*p.m_Age); // 深拷贝新开内存复制值 return *this; }关键步骤先释放自身原有堆内存防止内存泄漏从源对象的堆数据中读取值重新 new 一块新内存返回*this的引用支持链式赋值如p3 p2 p1 测试效果void test01() { Person p1(18); Person p2(20); Person p3(30); p3 p2 p1; // 链式赋值 cout p1的年龄为 *p1.m_Age endl; cout p2的年龄为 *p2.m_Age endl; cout p3的年龄为 *p3.m_Age endl; }输出p1的年龄为18 p2的年龄为18 p3的年龄为18✅ 三个对象各自拥有独立的堆内存互不影响✅ 支持p3 p2 p1链式赋值因为返回了*this引用 黄金法则三/五法则Rule of Three/Five如果你的类中使用了动态内存如new或管理了其他资源文件句柄、socket 等那么你很可能需要同时自定义析构函数拷贝构造函数赋值运算符这就是著名的“三法则”C11 后扩展为“五法则”加上移动构造和移动赋值否则默认的浅拷贝会让你陷入万劫不复的调试深渊✅ 总结编译器自动生成的operator是浅拷贝对指针极其危险。当类中有堆区指针时必须重载赋值运算符实现深拷贝。记得先释放旧资源再分配新资源最后返回*this。支持链式赋值的关键返回引用如果你觉得这篇推文帮你避开了一个大坑欢迎点赞、收藏、转发也欢迎留言“你在项目中遇到过浅拷贝导致的 bug 吗”
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

新手学做网站学要做哪些电子商务静态网页设计

ComfyUI社区推荐:十大必看GitHub开源项目 在AI生成内容(AIGC)爆发的今天,越来越多的创作者不再满足于“输入提示词、点击生成”这样黑箱式的工作流程。他们渴望更精细的控制、更高的复现性,以及真正可工程化的创作方式…

张小明 2026/1/1 11:53:32 网站建设

网站视频建设宁国网页制作公司

Multisim安装避坑全攻略:从报错闪退到顺利仿真,一文搞定 你是不是也遇到过这样的情况? 兴致勃勃下载了Multisim安装包,双击 setup.exe 后却卡在“正在配置服务”界面;或者装完了点开就闪退,连错误提示都…

张小明 2026/1/1 11:52:59 网站建设

自适应网站怎么做移动配置做淘宝店铺标志的网站

从零开始掌握 STM32 ADC 单通道采集:CubeMX 配置实战全解析你有没有遇到过这样的情况?明明接好了传感器,代码也写了好几遍,可 ADC 读出来的数据就是跳来跳去、不准甚至为零。调试半天才发现——GPIO 没设成模拟输入,或…

张小明 2026/1/1 11:52:26 网站建设

成都网站建设方案wordpress 3.9 sae

YOLOv8初始学习率lr0设置经验分享 在深度学习目标检测的实际项目中,一个看似微小的超参数——初始学习率(lr0),往往能决定整个训练过程的成败。尤其是在使用YOLOv8这类高度优化但对调参敏感的模型时,lr0的设定不仅影响…

张小明 2026/1/1 11:51:53 网站建设

南通网站设计制作页面素材

在 Linux 系统中,cron 守护进程用于定时执行命令或脚本。默认情况下,cron 作业以 root 用户运行。 但是,有时需要以非 root 用户的身份运行 cron 作业,例如 www-data 用户。www-data 用户经常被用于运行 web 应用程序,…

张小明 2026/1/1 11:51:20 网站建设

一级做a免费体验区不用下载网站音乐图书馆网站建设

随着新能源技术不断进化,20 万元以内的纯电 SUV 市场已经从单纯追求续航和性价比,转向对主动安全系统表现的深度考量。对于日常高速满载出行来说,刹车响应、车道保持稳定性、自适应巡航系统表现等主动安全功能,直接关系到行驶安全…

张小明 2026/1/1 11:50:46 网站建设