静态分配的构造函数和析构函数顺序

Ale*_*lex 3 c++ constructor c++11

我写了这个简单的代码,我期待一个不同的结果.

struct Test {
  int value_;
  Test(): value_(0) {
    std::cout << "Constructor: "<< value_ << "\n";
  }

  Test(int value): value_(value) {
    std::cout << "Constructor: "<< value_ << "\n";
  }

  ~Test() {
    std::cout << "Destructor: "<< value_ << "\n";
  }
};

int main(int argc, char **argv) {
  Test t;
  t = Test(10);
  t = Test(15);
  t = Test(20);
  t = Test(25);
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

Constructor: 0
Constructor: 10
Destructor: 10
Constructor: 15
Destructor: 15
Constructor: 20
Destructor: 20
Constructor: 25
Destructor: 25
Destructor: 25
Run Code Online (Sandbox Code Playgroud)

我很惊讶,因为它没想到最后一行会重复.为什么Destructor: 0没有打电话?

Gar*_*han 5

第一个"析构函数:25"来自于创建的临时对象的破坏Test(25); 第二个是来自t被复制的破坏.

除了最后一个"Destructor:"行和第一个"Constructor:"之外,所有输出都来自这些临时对象的创建和销毁.没有"析构函数:0",因为您永远不会创建值为0的临时对象,并且在t销毁时,其值不再为0.