【发布时间】:2017-10-01 09:53:22
【问题描述】:
我知道这个问题已经被问了好几(百万)次了,但我不明白接下来的内容:
如果我有这样的功能:
Object &function()
{
Object obj;
return obj;
}
以及调用它的客户端代码:
Object newObject = function();
我通过引用含义返回 obj ,这很糟糕,因为该对象一旦超出范围就会被销毁(在终止大括号之后)。但是我将该本地对象传递给调用站点的新对象,所以我不应该安全吗?当对象消失时,不应该(通过其复制构造函数)复制对象吗?我知道将指针传递给非本地对象是不好的,因为我正在传递(按值)指针的位置,一旦(本地)指针超出范围(堆栈帧消失),该位置将指向垃圾,但是为什么引用?代码不一样吗:
Object &temp = obj;
Object newObject = temp;
?请解释一下。
编辑上面的问题不是问同样的事情。我完全理解为什么我不应该返回指向本地的指针,以及为什么我不应该返回对本地的引用来初始化调用站点的引用。我不明白为什么我不能使用对本地的引用来初始化调用站点的对象。我觉得没那么简单。
【问题讨论】:
-
区别在于第二个例子,
obj在你创建newObject时仍然存在。在第一个示例中,obj在您创建newObject之前已停止存在。该函数在结果分配给newObject之前完全返回并清除它的变量。 -
不,因为对象在函数返回之前被销毁,而在函数返回之前无法完成。
-
另一个问题是问完全相同的事情 - 再次检查。它询问为什么不能返回引用,而你说'但是如果我确实返回它,我能用它做什么?
标签: c++ reference pass-by-reference pass-by-value