C++:类成员引用的有效性?

4
Class A
    {
     A(int& foo) : m_foo(foo) {}

     int& m_foo;
    };


int main(void)
{
 A* bar = 0;
 {
   int var = 5;
   bar = new A(var);
 }
 std::cout << "Is m_foo still valid?:" << bar.m_foo << std::endl;
}

"m_foo"是一个引用,"var"是一个本地变量,它被传递给构造函数。在打印值之前,"var"已经超出了作用域,那么m_foo也无效吗?

如果m_foo是一个指针,那么它将无效,但是对于引用是否也是同样的情况呢?

3个回答

6

int var超出作用域时,m_foo就不再有效。它所指向的对象已经不存在了。


3

是的,如果所引用的对象被释放,引用成员将会失效。这与指针一样。如果您想保留引用,请确保生命周期嵌套。或者使用类似于boost::weak_ptr的东西。


2

是的,此行为未定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接