얼마 전에 boost :: variant를 사용했는데 이제는 어떻게 내부적으로 작동하는지 알아 내려고하고 있습니다. 간단한 테스트를 작성했는데 그 결과를 이해할 수 없습니다. 여기가boost :: variant 개체 생성 횟수 VS 파괴 횟수
struct my_type
{
my_type(){ cout << (size_t)this << " construction"; }
~my_type(){ cout << (size_t)this << " destruction"; }
};
int main()
{
variant<int, my_type> x;
x = my_type();
}
같은 프로그램의 출력은
140736940365327 construction <-- A
140736940365236 destruction <-- ?
140736940365327 destruction <-- A
140736940365332 destruction <-- ?
입니다 (간체) 왜 소멸자 생성자로 여러 번 호출되지 않습니다 도대체? 소멸자가 힙을 통해 호출 될 때, 나는 이것이 세분화되지 않을 수도 있다는 것을 알고 있지만,이 동작은 위험한 것으로 보인다. 내가 놓친 게 있니? 이것은 boost :: variant의 "backup"메커니즘과 관련이 있습니까?
클래스에 복사 생성자를 추가합니다. – Mat