Qual è il modo corretto per riutilizzare un contenitore spostato?
std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);
// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize
container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
Da quello che ho letto nella bozza standard C ++ 0x; ver3 sembra essere il modo corretto, poiché un oggetto dopo il movimento è in un file
"Se non diversamente specificato, tali oggetti spostati da devono essere posti in uno stato valido ma non specificato."
Non ho mai trovato alcuna istanza in cui è "altrimenti specificato".
Anche se trovo ver3 un po 'indiretto e avrei preferito ver1, sebbene vec3 possa consentire alcune ottimizzazioni aggiuntive, ma d'altra parte può facilmente portare a errori.
La mia ipotesi è corretta?
clear
, poiché non ha precondizioni (e quindi nessuna dipendenza dallo stato dell'oggetto).