Push_back против emplace_back при использовании экземпляра типа шаблона в качестве значенияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Push_back против emplace_back при использовании экземпляра типа шаблона в качестве значения

Сообщение Anonymous »


Я знаю разницу между emplace_back(), который создает объект на месте с заданными параметрами конструктора, и push_back(), который копирует существующее значение. Таким образом, emplace_back(a, b, c) предпочтительнее, чем push_back(Type(a, b, c)), поскольку последний приводит к созданию, а затем копированию, а первый конструкции на месте, поэтому их не нужно копировать.

Но есть ли разница между emplace_back() и push_back(), если у меня уже есть экземпляр? Например. рассмотрим следующий код:

Ресурс MyType = get_resource(); std::vector a; a.emplace_back(ресурс); a.push_back(ресурс); Если я правильно понимаю, в приведенном выше примере emplace_back() создаст копию на месте, выделив и затем вызвав конструктор, передающий resource, который эффективно вызывает конструктор копирования. И вызов push_back() будет тем же самым? Или push_back() приведет к тому, что сначала будет создан экземпляр по умолчанию с использованием конструктора по умолчанию, а затем он перезапишется посредством назначения копирования, чтобы скопировать предоставленное значение?

Если да, то есть ли вообще когда-либо причина использовать push_back() и вместо этого всегда использовать emplace_back() для записи существующих экземпляров путем прямого вызова конструктора копирования и вообще пропустить инициализацию по умолчанию?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»