对于以下代码:

#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中实际的对象。

10-07 20:38