В C ++ 11, emplace_back()
как правило, предпочтительнее (с точки зрения эффективности), push_back()
поскольку он допускает создание на месте, но так ли это при использовании push_back(std::move())
с уже созданным объектом?
Например, что по- emplace_back()
прежнему предпочтительнее в следующих случаях?
std::string mystring("hello world");
std::vector<std::string> myvector;
myvector.emplace_back(mystring);
myvector.push_back(std::move(mystring));
// (of course assuming we don't care about using the value of mystring after)
Кроме того, есть ли какая-то польза в приведенном выше примере вместо того, чтобы делать:
myvector.emplace_back(std::move(mystring));
Или этот шаг здесь полностью избыточен или не имеет никакого эффекта?
myvector.emplace_back(mystring);
копирует и не перемещается. Два других хода должны быть эквивалентными.