Первый добавляет объект не-указатель, а второй добавляет указатель к вектору. Так что все зависит от объявления вектора, какой из них вы должны сделать.
В вашем случае, поскольку вы объявили objects
как std::vector<DrawObject>
, первый будет работать, так как objects
может хранить элементы типа DrawObject
, а не DrawObject*
.
В С++ 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, в котором говорится (выделить мое),
Добавляет новый элемент в конец контейнера. Элемент создается на месте, т. е. операции копирования или перемещения не выполняются. Конструктор элемента вызывается с точно такими же аргументами, которые передаются функции.
Поскольку он не использует копирование или перемещение, результирующий код может быть немного быстрее.
person
Nawaz
schedule
05.01.2013
DrawObject
просто классом? Это convertible_/_constructible из указателей? - person K-ballo   schedule 05.01.2013