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是一个指针,那么它会无效,但是它与引用的工作方式相同吗?
答案 0 :(得分:6)
m_foo
超出范围时, int var
无效。它引用的事物已经消失。
答案 1 :(得分:3)
是的,如果引用的对象被取消分配,引用成员将变为无效。与指针相同。如果您打算保留引用,请确保生命周期嵌套。或者使用类似boost::weak_ptr
的内容。
答案 2 :(得分:2)
是。行为未定义。