我写了这个简单的代码,我期望得到不同的结果。
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);
}
结果:
Constructor: 0
Constructor: 10
Destructor: 10
Constructor: 15
Destructor: 15
Constructor: 20
Destructor: 20
Constructor: 25
Destructor: 25
Destructor: 25
我很惊讶,因为没想到最后一行会重复。为什么 Destructor: 0
没有被调用?
最佳答案
第一个“Destructor: 25”来自Test(25)
创建的临时对象的析构;第二个是来自 t
的销毁,它已被复制到其中。
除了最后的“Destructor:”行和第一个“Constructor:”之外,所有输出都来自这些临时对象的创建和销毁。没有“Destructor: 0”,因为您永远不会创建值为 0 的临时对象,并且当 t
被销毁时,它的值不再是 0。
关于c++ - 静态分配的构造函数和析构函数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39395853/