Portanto, unique_ptr pode ser usado com segurança nas coleções stl?

Estou confuso com a filosofia unique_ptr e rvalue move.

Digamos que temos duas coleções:

std::vector<std::auto_ptr<int>> autoCollection;
std::vector<std::unique_ptr<int>> uniqueCollection;

Agora, eu esperaria que o seguinte falhe, pois não há como dizer o que o algoritmo está fazendo internamente e talvez fazer cópias dinâmicas internas e similares, arrancando assim a propriedade do auto_ptr:

std::sort(autoCollection.begin(), autoCollection.end());

Eu entendi isso. E o compilador corretamente não permite que isso aconteça.

Mas então eu faço isso:

std::sort(uniqueCollection.begin(), uniqueCollection.end());

E isso compila. E eu não entendo o porquê. Eu não achei que unique_ptrs pudesse ser copiado. Isso significa que um valor de pivô não pode ser obtido, portanto a classificação é menos eficiente? Ou esse pivô é realmente uma jogada, que na verdade é tão perigosa quanto a coleção de auto_ptrs e deve ser proibida pelo compilador?

Acho que estou perdendo alguma informação crucial, então espero ansiosamente alguém que me forneça o aha! momento.

questionAnswers(3)

yourAnswerToTheQuestion