Sono confuso con unique_ptr e rvalue move philosophy.Quindi può essere usato unique_ptr in modo sicuro nelle collezioni stl?
Diciamo che abbiamo due collezioni:
std::vector<std::auto_ptr<int>> autoCollection;
std::vector<std::unique_ptr<int>> uniqueCollection;
Ora mi aspetterei il seguente a fallire, in quanto non si può dire ciò che l'algoritmo sta facendo internamente e forse l'esecuzione di copie di articolazione interne e simili, strappando così di proprietà da auto_ptr:
std::sort(autoCollection.begin(), autoCollection.end());
Ho capito. E il compilatore giustamente nega che questo accada.
Ma poi faccio questo:
std::sort(uniqueCollection.begin(), uniqueCollection.end());
E questo compila. E non capisco perché. Non pensavo che unique_ptrs potesse essere copiato. Questo significa che non è possibile utilizzare un valore pivot, quindi l'ordinamento è meno efficiente? Oppure questo pivot è in realtà una mossa, che di fatto è pericolosa quanto la raccolta di auto_ptrs, e dovrebbe essere disabilitata dal compilatore?
Penso che mi manchi qualche informazione cruciale, quindi attendo con impazienza qualcuno che mi fornisca l'aha! momento.
In realtà il compilatore * dovrebbe * lamentarsi di 'std :: vector> autoCollection;' perché COAPS (Contenitori di Puntatori automatici) non sono consentiti in nessuna descrizione. –
Utilizzo di VS2010. Non ho nemmeno ricevuto un avviso su/W4. – DanDan
o ricevi un avviso che auto_ptr è ammortizzato. – DanDan