【发布时间】:2012-05-04 13:23:36
【问题描述】:
考虑这样一段代码:
struct B {
int c;
B() {
c = 20;
}
};
struct A {
boost::optional<B> m_b;
void f() {
B b;
this->m_b = b;
}
};
int main(void) {
A a;
a.f();
cout << a.m_b->c << endl;
}
显然,在将局部变量 b 分配给 m_b 之后,a.m_b 仍然有效。
这让我很困惑,因为我认为将对象分配给boost::optional<> 只是分配指向该对象的地址。由于在我的示例中该对象是b,它是一个局部变量,因此在函数f() 完成后其地址应该是无效的。
那为什么a.m_b 还活着?它应该指向一个无效的地址。
【问题讨论】:
标签: c++ boost scope global-variables