【问题标题】:C++: Reference to "out of scope" objectC++:对“超出范围”对象的引用
【发布时间】:2012-04-14 01:14:28
【问题描述】:

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

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

Object & ref = foo();

理论上的 ref 将引用一个不存在的对象,因为一旦函数返回,o 就会超出范围。这里发生了什么?

【问题讨论】:

  • 空指针和无效指针不是一回事!
  • 澄清一下——没有什么能阻止引用成为null。你不能直接引用null
  • 即使在实践中,ref 也会指代一个不存在的对象,就像短语“法国现任国王”一样。

标签: c++ reference


【解决方案1】:

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

在实现方面,实际上,引用将指向堆栈,用于调用 foo 的堆栈帧曾经是。在许多情况下,这种记忆仍然有意义,因此错误通常不会立即显现。因此,您应该注意不要做这样的悬空引用。

【讨论】:

    【解决方案2】:

    在你使用返回的引用之前什么都没有 - 然后你将在你的堆栈上读/写

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-12
        • 2015-12-28
        • 1970-01-01
        • 2020-04-22
        • 1970-01-01
        • 2011-11-23
        • 1970-01-01
        相关资源
        最近更新 更多