Проблема с семантикой копирования в auto_ptr
. Когда вы назначаете два авто указателя, RHS передаст владение памятью LHS. Это означает, что подпись присваивания: auto_ptr& operator=( auto_ptr& rhs )
(обратите внимание, что в RHS нет const
), поэтому во многих случаях она даже не будет компилироваться.
Существуют и другие умные указатели, которые можно использовать с контейнерами. В TR1 есть shared_ptr
, смоделированный после boost::shared_ptr
(в некоторых компиляторах это просто код в boost только что скопированный и с измененными пространствами имен). Boost также имеет boost::unique_ptr
, который будет заменой auto_ptr
в следующем стандарте. Он моделирует одиночное владение с семантикой перемещения, так что его можно использовать внутри без дополнительных затрат на использование shared_ptr
(хотя в большинстве случаев стоимость заметна).