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

四个函数的区别与问题

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

2. 核心结论

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

相关推荐
热爱生活的猴子20 分钟前
训练与推理时 Tokenizer Padding 用法笔记
人工智能·笔记·机器学习
Dr.F.Arthur1 小时前
我的算法笔记——哈希表篇
数据结构·笔记·散列表
ZhiqianXia1 小时前
Pytorch 学习笔记(4) : torch.backends
pytorch·笔记·学习
FakeOccupational2 小时前
【电路笔记 通信】8B_10B编码 高速数据传输的串行数据编码技术 论文流程对应实现(简化版本,仅编码数值)
笔记
忙什么果2 小时前
Mamba学习笔记2:Mamba模型
android·笔记·学习
悠哉悠哉愿意3 小时前
【物联网学习笔记】ADC
笔记·单片机·嵌入式硬件·物联网·学习
CheerWWW4 小时前
C++学习笔记——this关键字、对象生命周期(栈作用域)、智能指针、复制与拷贝构造函数
c++·笔记·学习
Moqiqiuzi4 小时前
ET8.1-ECS组件式编程
笔记·学习
ab1237685 小时前
C++ size() 与 length() 核心笔记
开发语言·c++·笔记
CheerWWW5 小时前
GameFramework——Download篇
笔记·学习·unity·c#