C++ return 通过引用的本地对象
C++ return a local object by reference
我知道这个问题已经被问了好几(百万)次了,但是我不明白下面的内容:
如果我有这样的功能:
Object &function()
{
Object obj;
return obj;
}
以及调用它的客户端代码:
Object newObject = function();
我 returning obj 的引用意义,这很糟糕,因为该对象一旦超出范围(在终止大括号之后)就会被销毁。但是我正在将该本地对象传递给调用站点的一个新对象,所以我不应该安全吗?当对象消失时,它不应该被复制(通过它的复制构造函数)吗?我知道将指针传递给本地对象是不好的,因为我正在(按值)传递指针的位置,一旦(本地)指针超出范围(堆栈框架消失),指针的位置将指向垃圾,但为什么引用?代码是不是一样的:
Object &temp = obj;
Object newObject = temp;
?请解释。
EDIT 上面的问题不是在问同样的事情。我完全理解为什么我不应该 return 指向本地的指针,以及为什么我不应该 return 对本地的引用来初始化调用站点的引用。我不明白的是为什么我不能使用对本地的引用来初始化调用站点的对象。我不认为这是微不足道的。
不,正如你自己所说,它不安全。
无论您对现在已销毁的对象的现在无效引用做什么,都是如此。
来不及复制了
我知道这个问题已经被问了好几(百万)次了,但是我不明白下面的内容:
如果我有这样的功能:
Object &function()
{
Object obj;
return obj;
}
以及调用它的客户端代码:
Object newObject = function();
我 returning obj 的引用意义,这很糟糕,因为该对象一旦超出范围(在终止大括号之后)就会被销毁。但是我正在将该本地对象传递给调用站点的一个新对象,所以我不应该安全吗?当对象消失时,它不应该被复制(通过它的复制构造函数)吗?我知道将指针传递给本地对象是不好的,因为我正在(按值)传递指针的位置,一旦(本地)指针超出范围(堆栈框架消失),指针的位置将指向垃圾,但为什么引用?代码是不是一样的:
Object &temp = obj;
Object newObject = temp;
?请解释。
EDIT 上面的问题不是在问同样的事情。我完全理解为什么我不应该 return 指向本地的指针,以及为什么我不应该 return 对本地的引用来初始化调用站点的引用。我不明白的是为什么我不能使用对本地的引用来初始化调用站点的对象。我不认为这是微不足道的。
不,正如你自己所说,它不安全。
无论您对现在已销毁的对象的现在无效引用做什么,都是如此。
来不及复制了