将对象添加到向量会导致构造器/复制/解构器组合古怪

时间:2018-10-10 21:16:38

标签: c++ visual-studio pointers vector stdvector

具有以下源文件:

Obj.h

class Obj
{
public:
    Obj();
    Obj(const Obj &other);
    ~Obj();
};

Obj.cpp

#include <iostream>
#include "Obj.h"

using namespace std;

Obj::Obj(){ cout << "create "; }

Obj::Obj(const Obj &other){ cout << "copy "; }

Obj::~Obj(){ cout << "delete "; }

main.cpp

#include <vector>
#include "Obj.h"

using namespace std;

vector<Obj> objects;

int main(int argc, char** argv)
{
    for (int i = 0; i < 4; i++)
        objects.push_back(*(new Obj));
    //system("pause");
}

程序输出:     创建副本创建副本复制删除创建副本复制复制删除删除创建复制复制复制复制删除删除删除

为什么不能只是“创建,创建,创建,创建”?

我没有解决该问题的想法,而且我刚刚开始学习指针和c ++本身并没有帮助。任何帮助表示赞赏!

我将Visual Studio 2017与默认的任何编译器一起使用。

0 个答案:

没有答案