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