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