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

Antworten auf die Frage(6)

Ihre Antwort auf die Frage