So kann unique_ptr sicher in STL-Sammlungen verwendet werden?
Ich bin verwechselt mit der Philosophie von unique_ptr und rvalue move.
Nehmen wir an, wir haben zwei Sammlungen:
std::vector<std::auto_ptr<int>> autoCollection;
std::vector<std::unique_ptr<int>> uniqueCollection;
Now Ich würde davon ausgehen, dass das Folgende fehlschlägt, da nicht gesagt werden kann, was der Algorithmus intern tut und möglicherweise interne Pivot-Kopien und dergleichen erstellt, wodurch der auto_ptr das Eigentumsrecht entzogen wird:
std::sort(autoCollection.begin(), autoCollection.end());
Ich verstehe das. Und der Compiler lässt dies zu Recht nicht zu.
Aber dann mache ich das:
std::sort(uniqueCollection.begin(), uniqueCollection.end());
Und dies wird kompiliert. Und ich verstehe nicht warum. Ich dachte nicht, dass unique_ptrs kopiert werden könnte. Bedeutet dies, dass kein Pivot-Wert verwendet werden kann, sodass die Sortierung weniger effizient ist? Oder handelt es sich bei diesem Pivot tatsächlich um einen Zug, der genauso gefährlich ist wie die Auflistung von auto_ptrs und vom Compiler nicht zugelassen werden sollte?
Ich glaube, ich vermisse einige wichtige Informationen, also erwarte ich gespannt auf jemanden, der mir das Aha liefert! Moment