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

时间:2010-11-16 20:40:13

标签: c++ reference

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 个答案:

答案 0 :(得分:6)

m_foo超出范围时,

int var无效。它引用的事物已经消失。

答案 1 :(得分:3)

是的,如果引用的对象被取消分配,引用成员将变为无效。与指针相同。如果您打算保留引用,请确保生命周期嵌套。或者使用类似boost::weak_ptr的内容。

答案 2 :(得分:2)

是。行为未定义。