In C ++ 11 emplace_back()
è generalmente preferito (in termini di efficienza) in push_back()
quanto consente la costruzione sul posto, ma è ancora così quando si utilizzapush_back(std::move())
con un oggetto già costruito?
Ad esempio, è emplace_back()
ancora preferito in casi come i seguenti?
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)
Inoltre, nell'esempio precedente c'è qualche vantaggio nel fare invece:
myvector.emplace_back(std::move(mystring));
o il trasferimento qui è del tutto ridondante o non ha alcun effetto?
myvector.emplace_back(mystring);
copia e non si muove. Le altre due mosse e dovrebbero essere equivalenti.