TestDelete::TestDelete(int i) {
this->i = i;
std::cout <<"TestDelete constructor for "<<this->i<<"\n";
}
TestDelete::~TestDelete() {
std::cout <<"TestDelete destructor for "<<this->i<<"\n";
}
int main () {
std::vector<TestDelete> pt;
pt.push_back(TestDelete(1));
pt.push_back(TestDelete(2));
return 0;
}
上面的代码片段输出如下
1 的 TestDelete 构造函数
1 的 TestDelete 析构函数
2 的 TestDelete 构造函数
1 的 TestDelete 析构函数;
2 的 TestDelete 析构函数;
1 的 TestDelete 析构函数;
2 的 TestDelete 析构函数;
我理解的实现push_back
基于复制交换概念,因此调用了临时对象的构造函数和析构函数。但是,如果您注意到对析构函数的额外调用object1
。
有人可以解释这里发生了什么吗?