C++ boost::变量对象构造计数与销毁计数

C++ boost::变量对象构造计数与销毁计数,c++,boost-variant,C++,Boost Variant,我使用boost::variant已经有一段时间了,现在我正试图弄清楚它在内部是如何工作的。我写了一个简单的测试,但我不能理解结果。在这里(简化) struct my\u类型 { my_type(){cout您只定义了一个默认构造函数,但当然也可以使用各种参数调用构造函数。因为您没有显式定义副本构造函数,(一个采用常量my_type&的构造函数),编译器会隐式为您生成一个。如果您添加自己的复制构造函数,您应该会看到它用于构造其他两个神秘对象: struct my_type { my_type

我使用boost::variant已经有一段时间了,现在我正试图弄清楚它在内部是如何工作的。我写了一个简单的测试,但我不能理解结果。在这里(简化)

struct my\u类型
{

my_type(){cout您只定义了一个默认构造函数,但当然也可以使用各种参数调用构造函数。因为您没有显式定义副本构造函数,(一个采用
常量my_type&
的构造函数),编译器会隐式为您生成一个。如果您添加自己的复制构造函数,您应该会看到它用于构造其他两个神秘对象:

struct my_type
{
  my_type(){ cout << (size_t)this << " construction"; }
  my_type(const my_type&){ cout << (size_t)this << " copy construction"; }
  ~my_type(){ cout << (size_t)this << " destruction"; }
};
struct my\u类型
{

my_type(){无法向类中添加复制构造函数。因此,如果我没有定义默认构造函数,则会隐式调用它?@neodelphi是的,如果您没有定义,编译器会隐式为您生成一个复制构造函数。谢谢,这就解释了它!
140736940365327 construction  <-- A
140736940365236 destruction  <-- ?
140736940365327 destruction  <-- A
140736940365332 destruction  <-- ?
struct my_type
{
  my_type(){ cout << (size_t)this << " construction"; }
  my_type(const my_type&){ cout << (size_t)this << " copy construction"; }
  ~my_type(){ cout << (size_t)this << " destruction"; }
};
struct my_type
{
  my_type(){ cout << (size_t)this << " construction"; }
  my_type(const my_type&){ cout << (size_t)this << " copy construction"; }
  my_type(my_type&&){ cout << (size_t)this << " move construction"; }
  ~my_type(){ cout << (size_t)this << " destruction"; }
};