push_back и emplace_back
Вопрос
Чем emplace_back(args...) отличается от push_back(T(args...))?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Ответ
emplace_back конструирует элемент прямо в памяти вектора из аргументов (perfect forwarding). push_back(T(...)) создаёт временный объект и затем перемещает его внутрь. Для дешёвых в перемещении типов разница мала, а emplace_back может неожиданно вызвать explicit-конструктор.
Разбор
emplace_back конструирует элемент прямо в памяти вектора из аргументов (perfect forwarding). push_back(T(...)) создаёт временный объект и затем перемещает его внутрь. Для дешёвых в перемещении типов разница мала, а emplace_back может неожиданно вызвать explicit-конструктор.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Move-семантика»
- Перенос между складами: map::extract без копий
- Топ участников: сортировка записей без копий строк
- lvalue, prvalue, xvalue
- Объясни move-семантику
- Допишите обёртку с perfect forwarding
- move или forward в шаблоне
- Что такое T&& в шаблоне
- Состояние после перемещения