第一个添加非指针对象,而第二个添加指向向量的指针。所以这一切都取决于你应该做哪个向量的声明。
在您的情况下,由于您已声明objects
为std::vector<DrawObject>
,所以第一个将起作用,因为objects
可以存储类型的项目DrawObject
,而不是DrawObject*
。
在 C++11 中,您可以emplace_back
用作:
objects.emplace_back(name, surfaceFile, xPos, yPos,
willMoveVar, animationNumber);
注意区别。将其与:
objects.push_back(DrawObject(name, surfaceFile, xPos, yPos,
willMoveVar, animationNumber));
使用emplace_back
,您不会在调用点构造对象,而是将参数传递给向量,然后向量在内部就地构造对象。在某些情况下,这可能会更快。
阅读有关emplace_back的文档(强调我的),
将新元素附加到容器的末尾。该元素是就地构造的,即不执行复制或移动操作。使用提供给函数的完全相同的参数调用元素的构造函数。
由于它避免了copy或move,因此生成的代码可能会更快一些。