Карточка Junior Move-семантика спрашивают часто обновлено

push_back и emplace_back

Вопрос

Чем emplace_back(args...) отличается от push_back(T(args...))?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

emplaceback конструирует элемент прямо в памяти вектора из аргументов (perfect forwarding). pushback(T(...)) создаёт временный объект и затем перемещает его внутрь. Для дешёвых в перемещении типов разница мала, а emplaceback может неожиданно вызвать explicit-конструктор.

Ответ

emplace_back конструирует элемент прямо в памяти вектора из аргументов (perfect forwarding). push_back(T(...)) создаёт временный объект и затем перемещает его внутрь. Для дешёвых в перемещении типов разница мала, а emplace_back может неожиданно вызвать explicit-конструктор.

Разбор

emplace_back конструирует элемент прямо в памяти вектора из аргументов (perfect forwarding). push_back(T(...)) создаёт временный объект и затем перемещает его внутрь. Для дешёвых в перемещении типов разница мала, а emplace_back может неожиданно вызвать explicit-конструктор.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.