En C ++ 11 emplace_back()
generalmente se prefiere (en términos de eficiencia) push_back()
porque permite la construcción en el lugar, pero ¿sigue siendo así cuando se usa push_back(std::move())
con un objeto ya construido?
Por ejemplo, ¿ emplace_back()
todavía se prefiere en casos como el siguiente?
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)
Además, ¿hay algún beneficio en el ejemplo anterior de hacer en su lugar:
myvector.emplace_back(std::move(mystring));
¿O la mudanza aquí es completamente redundante o no tiene ningún efecto?
myvector.emplace_back(mystring);
copia y no se mueve. Los otros dos se mueven y deberían ser equivalentes.