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没有打电话?
第一个"析构函数:25"来自于创建的临时对象的破坏Test(25); 第二个是来自t被复制的破坏.
除了最后一个"Destructor:"行和第一个"Constructor:"之外,所有输出都来自这些临时对象的创建和销毁.没有"析构函数:0",因为您永远不会创建值为0的临时对象,并且在t销毁时,其值不再为0.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |