C++笔记(面向对象)对于对象返回方式的讲解

四个函数的区别与问题

函数 返回方式 问题分析
GetDate_1 值返回(CDate) 函数内创建局部对象dt,返回时会调用拷贝构造函数生成临时对象,再将临时对象拷贝给调用处(如dal),过程有两次拷贝,效率一般但逻辑安全。
GetDate_2 引用返回(CDate &) 函数内创建的局部对象dt在函数结束时会被销毁,返回的引用指向已释放的内存(野指针),调用处使用该引用会导致未定义行为。
GetDate_3 值返回(CDate) 直接返回临时对象CDate(2024,5,1),编译器会优化(如 RVO 返回值优化),直接将临时对象构造在调用处的目标变量中,效率高且安全。
GetDate_4 引用返回(CDate &) 返回临时对象的引用,但临时对象在语句结束后会立即销毁,返回的引用同样指向无效内存,调用处使用会出错。

2. 核心结论

返回对象时,除非返回的是函数外的有效对象(如类成员、全局对象),否则不要返回引用。值返回(尤其是返回临时对象)在编译器优化下既安全又高效,而返回局部对象或临时对象的引用会导致 "野引用" 问题,这也是代码底部注释 "必须返回一个对象时不要试图返回一个引用" 的原因。

相关推荐
果壳science5 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
大叔学Linux6 小时前
FreeRTOS任务切换笔记
arm开发·笔记
职豚求职小程序刷题9 小时前
易方达基金2027秋招笔试|考什么+场次提醒
笔记
无锡银洲自动化9 小时前
煤粉测点频繁堵管?FD 防堵风压取样器现场调试小结
笔记·产品运营
ACP广源盛1392462567310 小时前
Type-C 扩展坞选型笔记:DP1.4a 转 HDMI2.0 桥接方案 GSV2201E @ACP评估
笔记·硬件架构·硬件工程·视频·hdmi·国产芯片
xian_wwq10 小时前
【学习笔记-一文读懂系列】读懂GBZ-195-2026《人工智能 工业智能体参考架构》
笔记·学习
ss27312 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 19 PostgreSQL逻辑备份:pg_dump与pg_dumpall
数据库·笔记·postgresql
flytalei12 小时前
逐浪笔记 GitOps 实战:Jenkins 构建、Argo CD 同步与 Git 回滚
笔记·git·jenkins
叼烟扛炮13 小时前
Linux 学习笔记(八):GCC 编译器的四大阶段与链接原理
linux·笔记·学习