std::unique_ptr<int> p1(new int);
std::unique_ptr<int> p2(new int);
p2=p1;
Здесь кажется, что p1 больше не является «уникальным», поскольку p2 также ссылается на него.
Это законно С++? Имеет ли unique_ptr copy_semantics? Если нет, и если он имеет только семантику перемещения, устанавливается ли p1 в NULL после назначения его p2?
ИЗМЕНИТЬ:
хорошо, значит правильная версия
p2=std::move(p1)
В соответствии с этим после этого присваивания p1 недействителен? А разница с auto_ptr здесь есть? более безопасно явно указать передачу права собственности, чем неявно, как в случае с auto_ptr, я думаю