为什么返回一个临时对象的引用是不安全的

1.问题说明
返回一个临时对象的引用是不安全的,因为当离开作用域,这个临时对象会马上析构,所以函数返回的总是悬挂引用(空悬引用),使用这个引用是一个未定义行为,会导致程序崩溃。
2.问题分析
看下面这段代码:

const int&retRef()
{
   return 1180;
} 
const int&k = retRef();
std::cout<<k<<std::endl;

此时打印k,就是一个未定义行为,因为,1180的引用所指对象已经被销毁了(引用其实只是常量指针)。
这个很容易识别。但是,这里实际上隐含一个只能指针的坑。
下面这段代码其实也是不安全的:

const std::shared_ptr<int>& retRef()
{
    return nullptr;
}

智能指针也是一个对象,返回nullptr,编译器会构造一个临时对象,并用拷贝构造函数吧null复制进去,此时,会产生和上面那段代码一样的问题。
如果此时,调用这个函数,其实也是未定义行为。


C++工程实践
不定期更新C++面试问题及解答,C++踩坑记录和C++工程实践经验
1 声望
0 粉丝
0 条评论
推荐阅读
刨根问底 Redis, 面试过程真好使
充满寒气的互联网如何在面试中脱颖而出,平时积累很重要,八股文更不能少!下面带来的这篇 Redis 问答希望能够在你的 offer 上增添一把🔥。

菜农曰17阅读 909

封面图
如何在网页置灰的时候,部分元素保持彩色-有意思的面试题
在线体验本文视频版链接最近哀悼日,网页端如何一键变灰已经有很多实现方式了,但是我看到一个推文很有意思,是一个不错的面试题现在网页置灰已经不仅仅是一行css的事了,如何在网页置灰的前提下,部分元素保持彩...

前端小菜鸟7阅读 558

封面图
万字避坑指南!C++的缺陷与思考(上)
导语 | 本文主要总结了本人在C++开发过程中对一些奇怪、复杂的语法的理解和思考,同时作为C++开发的避坑指南。前言C++是一门古老的语言,但仍然在不间断更新中,不断引用新特性。但与此同时C++又甩不掉巨大的历史...

腾讯云开发者6阅读 526

JS核心知识点梳理——正则篇(下)
正则是一个前端必须掌握的知识。但是由于用的少,忘了记,记了忘,导致面试经常坐蜡。这里上篇先介绍正则的规则,下篇结合一些具体题目,带大家重新学习巩固一下正则,争取面试给自己加分。

Runningfyy3阅读 2k

热点面试题:什么是粘包/半包问题,该如何解决?
极度投入,深度沉浸,边界清晰前端小菜鸡一枚,分享的文章纯属个人见解,若有不正确或可待讨论点可随意评论,与各位同学一起学习~欢迎关注 『前端进阶圈』 公众号 ,一起探索学习前端技术......公众号回复 加群 ...

控心crazy2阅读 561

封面图
麒麟操作系统 (kylinos) 从入门到精通 - 研发环境 - 第二十一篇 C++/C语言开发环境搭建
类别:笔记本型号:中国长城 NF14C硬件平台:飞腾处理器(ArmV8 指令集)系统:银河麒麟操作系统 V10 SP1(2203) 关键词:信创,麒麟系统,linux,c++,c,内核飞腾,arm

码上世界1阅读 2.4k评论 1

封面图
万字避坑指南!C++的缺陷与思考(下)
导读 | 在万字避坑指南!C++的缺陷与思考(上)一文中,微信后台开发工程师胡博豪,分享了C++的发展历史、右值引用与移动语义、类型说明符等内容,深受广大开发者喜爱!此篇,我们邀请作者继续总结其在C++开发过...

腾讯云开发者5阅读 495评论 1

1 声望
0 粉丝
宣传栏