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

造一个分布式轮子

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复制进去,此时,会产生和上面那段代码一样的问题。
如果此时,调用这个函数,其实也是未定义行为。

阅读 627

C++工程实践
不定期更新C++面试问题及解答,C++踩坑记录和C++工程实践经验
1 声望
0 粉丝
0 条评论
1 声望
0 粉丝
文章目录
宣传栏