Em C ++ 11 emplace_back()
geralmente é preferível (em termos de eficiência) push_back()
, pois permite a construção no local, mas ainda é o caso ao usar push_back(std::move())
com um objeto já construído?
Por exemplo, emplace_back()
ainda é preferido em casos como o seguinte?
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)
Além disso, há alguma vantagem no exemplo acima em fazer:
myvector.emplace_back(std::move(mystring));
ou a mudança aqui é totalmente redundante ou não tem efeito?
myvector.emplace_back(mystring);
copia e não se move. Os outros dois movimentos e devem ser equivalentes.