C ++:引用“超出范围”对象

时间:2012-03-30 10:46:57

标签: c++ reference

有一件事我从未理解过参考文献,我希望有人可以帮助我。据我所知,引用不能为空。但是如果你有一个函数foo()返回对堆栈对象的引用会发生什么:

Object & foo(){
    Object o;
    return o;
}

Object & ref = foo();

理论引用会引用一个不存在的对象,因为一旦函数返回,o就会超出范围。这是怎么回事?

3 个答案:

答案 0 :(得分:11)

这会导致未定义的行为。不要这样做。

实现方面,实际上,引用将指向堆栈,其中调用foo的堆栈帧曾经是。在许多情况下,这种记忆仍然有意义,因此错误通常不会立即显现出来。因此,你应该小心永远不要做那样的悬挂式参考。

答案 1 :(得分:1)

在您使用返回的引用之前没有任何内容 - 然后您将在堆栈上读/写

答案 2 :(得分:1)

此上下文中的行为未定义 - 这在c ++中并不特别奇怪。这与将指针设置为超出范围的局部变量的情况基本相同。 C ++要求您控制句柄引用和引用对象的生命周期。