Я путаюсь с идеями unique_ptr и rvalue move.
Скажем, у нас есть две коллекции:
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, и должен быть запрещен компилятором?
Я думаю, что мне не хватает какой-то важной информации, поэтому я с нетерпением жду, чтобы кто-то дал мне ага! момент.