std :: vector push_back(Object())和push_back(new Object())的区别?

Gig*_*ass 7 c++ insert vector std

在我当前的代码中,我想将新的DrawObjects插入到我创建的向量中,

std :: vector <DrawObject>对象;

有什么区别:

objects.push_back(DrawObject(name, surfaceFile, xPos, yPos, willMoveVar, animationNumber));
Run Code Online (Sandbox Code Playgroud)

objects.push_back(new DrawObject(name, surfaceFile, xPos, yPos, willMoveVar, animationNumber));
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 16

第一个添加非指针对象,而第二个添加指向矢量的指针.所以这一切都取决于向量的声明,你应该做哪一个.

在你的情况下,因为你已经声明objectsstd::vector<DrawObject>,所以第一个将工作,因为objects可以存储类型的项目DrawObject,而不是DrawObject*.

在C++ 11中,您可以使用emplace_backas:

objects.emplace_back(name, surfaceFile, xPos, yPos, 
                     willMoveVar, animationNumber);
Run Code Online (Sandbox Code Playgroud)

注意区别.比较它:

objects.push_back(DrawObject(name, surfaceFile, xPos, yPos, 
                            willMoveVar, animationNumber));
Run Code Online (Sandbox Code Playgroud)

使用时emplace_back,不要在调用站点构造对象,而是将参数传递给vector,并且向量在内部构造对象.在某些情况下,这可能会更快.

阅读有关emplace_back的文档(强调我的),

将新元素追加到容器的末尾.元素就地构造,即不执行复制或移动操作.使用与提供给函数的完全相同的参数调用元素的构造函数.

由于它避免了复制移动,因此结果代码可能会更快一些.