W C ++ 11 emplace_back()
jest ogólnie preferowane (pod względem wydajności), push_back()
ponieważ umożliwia konstruowanie w miejscu, ale czy nadal tak jest w przypadku używania push_back(std::move())
z już zbudowanym obiektem?
Na przykład, czy emplace_back()
nadal jest preferowany w takich przypadkach jak poniżej?
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)
Dodatkowo, czy w powyższym przykładzie jest jakaś korzyść, aby zamiast tego zrobić:
myvector.emplace_back(std::move(mystring));
czy też ruch tutaj jest całkowicie zbędny, czy nie ma żadnego skutku?
myvector.emplace_back(mystring);
kopiuje i nie porusza się. Pozostałe dwa ruchy i powinny być równoważne.