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

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

<分区>

我知道这个问题已经被问过好几(百万)次了,但是我不明白下面的内容:

如果我有这样一个函数:

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

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

Object newObject = function();

我通过引用返回 obj ,这很糟糕,因为该对象一旦超出范围(在终止大括号之后)就会被销毁。但是我正在将该本地对象传递给调用站点的一个新对象,所以我不应该安全吗?当对象消失时,它不应该被复制(通过它的复制构造函数)吗?我知道将指针传递给本地对象是不好的,因为我正在(按值)传递指针的位置,一旦(本地)指针超出范围(堆栈框架消失),指针的位置将指向垃圾,但为什么引用?代码不一样吗:

Object &temp = obj;
Object newObject = temp;

?请解释。

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

最佳答案

不,正如您自己所说,它不安全。

无论您对现在已销毁的对象的现在无效引用做什么,都是如此。

来不及复制了。

关于C++ 通过引用返回本地对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762195/

相关文章:

c++ - 访问器应该返回值还是常量引用?

iphone - 当我通过引用传递 CoreData 托管对象变量时,为什么我的原始变量没有改变?

c++ - 引用构造函数

c++ - 检查 NULL 值 C++ 的引用

python - 通过分配 : Python

c++ - 如何创建一个从两侧都可见的四边形?

c++ - ERROR_DEV_NOT_EXIST when::CreateFile 在 C++ MFC 中?

c++ - C/C++ - 检查今天是否是本月的第一个星期一

c++ - 我可以将文件描述符的地址分配给变量吗?

c++ - 指针和引用的功能