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

四个函数的区别与问题

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

2. 核心结论

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

相关推荐
xuhaoyu_cpp_java14 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
Cloud_Shy61817 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
做cv的小昊17 小时前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论
星恒随风17 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
伊布拉西莫21 小时前
【流畅的Python】第20章:并发执行器 — 学习笔记
笔记·python·学习
AOwhisky1 天前
学习自测与解析:MySQL第五、六、七期核心知识点详解
运维·数据库·笔记·学习·mysql·云计算
niuniuyi~1 天前
QT学习笔记
笔记·qt·学习
咸甜适中1 天前
rust语言学习笔记Trait(十六)Error(错误)
笔记·学习·rust
xuhaoyu_cpp_java1 天前
项目学习(三)代码生成器
java·经验分享·笔记·学习
my_daling1 天前
松下伺服驱动器参数保存流程(已在松下A5上验证)
笔记