我已经使用 boost::variant 一段时间了,现在我试图弄清楚它是如何在内部工作的。我写了一个简单的测试,我无法理解结果。这是(简化)
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 的“备份”机制有关吗?