Так можно ли безопасно использовать unique_ptr в коллекциях stl?
Меня смущают философия перемещения unique_ptr и rvalue.
Допустим, у нас есть две коллекции:
std::vector<std::auto_ptr<int>> autoCollection;
std::vector<std::unique_ptr<int>> uniqueCollection;
Теперь я ожидал бы, что следующее не получится, так как нет никакой информации о том, что алгоритм делает внутри, и, возможно, делает внутренние сводные копии и т. П., Таким образом отрывая владение от auto_ptr:
std::sort(autoCollection.begin(), autoCollection.end());
Я понял это. И компилятор справедливо запрещает это.
Но тогда я делаю это:
std::sort(uniqueCollection.begin(), uniqueCollection.end());
И это компилируется. И я не понимаю почему. Я не думал, что unique_ptrs можно скопировать. Означает ли это, что не может быть принято значение поворота, поэтому сортировка менее эффективна? Или этот стержень на самом деле является движением, которое на самом деле так же опасно, как и коллекция auto_ptrs, и должно быть запрещено компилятором?
Я думаю, что мне не хватает какой-то важной информации, поэтому я с нетерпением жду, когда кто-нибудь предоставит мне ага! момент.