考虑这样一段代码:
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;
}
显然,a.m_b
在将局部变量分配b
给m_b
.
这让我很困惑,因为我认为分配一个对象boost::optional<>
只是分配指向该对象的地址。由于在我的示例中该对象是b
,它是一个局部变量,因此它的地址在函数完成后应该是无效f()
的。
那为什么a.m_b
还活着?它应该指向一个无效的地址。