对于以下代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
struct Test
{
string Str;
Test(const string s) :Str(s)
{
cout<<Str<<" Test() "<<this<<endl;
}
~Test()
{
cout<<Str<<" ~Test() "<<this<<endl;
}
};
struct TestWrapper
{
vector<Test> vObj;
TestWrapper(const string s)
{
cout<<"TestWrapper() "<<this<<endl;
vObj.push_back(s);
}
~TestWrapper()
{
cout<<"~TestWrapper() "<<this<<endl;
}
};
int main ()
{
TestWrapper obj("ABC");
}
这是我在MSVC++编译器上获得的输出:
TestWrapper()0018F854
ABC测试()0018F634
ABC〜测试()0018F634
〜TestWrapper()0018F854
ABC〜测试()003D8490
为什么只创建一个Test对象,却有两次调用Test析构函数。之间是否创建了任何临时对象?如果是,为什么不调用其对应的构造函数?
我想念什么吗?
最佳答案
您的输出不考虑Test的copy构造函数,而std::vector
易于使用。
您看到创建的Test对象是传递给push_back()
的临时对象,而不是vector
中实际的对象。