0
は、このようなコードの部分を検討:boost :: optional <>はどのようにローカル変数を扱うのですか?
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
は依然として正当m_b
ローカル変数b
を割り当てた後、存在します。
私はオブジェクトをboost::optional<>
に割り当てることは、オブジェクトを指し示すアドレスを割り当てていると思っていたので、この種のことはわかりません。私の例ではオブジェクトはローカル変数であるb
なので、そのアドレスは関数f()
が終了すると無効になるはずです。
なぜa.m_b
はまだ生きていますか?無効なアドレスを指しているはずです。
わかりました。それがコピーを作ることを知らなかった。ありがとう! – CodeNoob