C ++通过引用返回本地对象

时间:2017-05-03 13:57:55

标签: c++ reference pass-by-reference pass-by-value

我知道这个问题已被问过几百万次,但我无法理解以下内容:

如果我有这样的功能:

Object &function()
{
    Object obj;
    return obj;
}

以及调用它的客户端代码:

Object newObject = function();

我通过引用意义返回obj并且这很糟糕,因为该对象一旦超出范围(在终止大括号之后)就会被销毁。但是我将该本地对象传递给呼叫站点的新对象,所以我不安全吗?该对象在它消失后是否已被复制(通过其复制构造函数)?我知道将指针传递给alocal对象是不好的,因为我传递(通过值)指针的位置,一旦(本地)指针超出范围(堆栈帧是走了),但为什么参考?不是代码与:

相同
Object &temp = obj;
Object newObject = temp;

?请解释一下。

编辑上面提出的问题不是问同样的事情。我完全理解为什么我不应该返回指向本地的指针,以及为什么我不能返回对本地的引用来初始化调用站点的引用。我不明白的是为什么我不能使用对本地的引用来初始化呼叫站点上的对象。我不认为它是如此微不足道。

1 个答案:

答案 0 :(得分:1)

不,正如你自己说的那样,这是不安全的。

无论你对现在被破坏的对象的现在无效的引用做了什么,都是如此。

复制它已经太晚了。