Проблема с std::auto_ptr
состоит в том, что он имеет операции копирования, которые работают как операции перемещения.Поэтому алгоритмы, которые работают с операциями копирования, могут работать на auto_ptr
, но они не ведут себя должным образом, так как скопированные из объектов изменились.Таким образом, auto_ptr
нельзя использовать с контейнерами STL, однако код, который пытается это сделать, скомпилируется, но не работает во время выполнения.
std::unique_ptr
, с другой стороны, не имеет операций копирования, но только подвижный вместо.Поэтому алгоритмы, которые копируют std::unique_ptr
, не будут компилироваться, когда они должны работать на std::unique_ptr
.Если что-то использует операции перемещения, оно не ожидает, что источник операции перемещения останется прежним, поэтому здесь нет путаницы.
Таким образом, в основном все сводится к операциям, работающим так, как ожидается для объекта C ++ (или нет).