提问人:Luca 提问时间:5/3/2017 最后编辑:Luca 更新时间:5/3/2017 访问量:1849
C++ 通过引用返回本地对象 [duplicate]
C++ return a local object by reference [duplicate]
问:
我知道这个问题已经被问了好几(百万)次,但我不明白接下来的内容:
如果我有这样的函数:
Object &function()
{
Object obj;
return obj;
}
以及调用它的客户端代码:
Object newObject = function();
我通过引用含义返回 obj,这很糟糕,因为该对象一旦超出范围(在终止大括号之后)就会被销毁。但是我正在将该本地对象传递给调用站点的新对象,因此我不应该安全吗?当对象消失时,它不应该被复制(由其复制构造函数)吗?我知道传递指向本地对象的指针是不好的,因为我正在传递(按值)指针的位置,一旦(本地)指针超出范围(堆栈帧消失),该指针将指向垃圾,但为什么要引用?代码不是和以下代码一样吗:
Object &temp = obj;
Object newObject = temp;
?请解释。
编辑:上面的问题不是问同样的事情。我完全理解为什么我不应该返回指向本地的指针,以及为什么我不返回对本地的引用以初始化调用站点的引用。我不明白的是为什么我不能使用对本地的引用来初始化调用站点上的对象。我不认为这是微不足道的。
答:
2赞
Lightness Races in Orbit
5/3/2017
#1
不,正如你自己所说,这是不安全的。
无论您对现在无效的对现已销毁的对象的引用执行什么操作,都是如此。
复制为时已晚。
评论
0赞
Luca
5/3/2017
所以我不能说在对象消失之前“保存”它?
1赞
Angew is no longer proud of SO
5/3/2017
@Luca 是的,您可以通过返回值而不是引用来获得。这几乎就是按价值返回的意思。
0赞
Lightness Races in Orbit
5/3/2017
这正是按值返回的意义。
2赞
Benjamin Lindley
5/3/2017
@Luca:如果你担心的是多余的复制。别这样。编译器是你的坚强后盾。stackoverflow.com/questions/12953127/......
评论
obj
newObject
obj
newObject
newObject