std::auto_ptr
нельзя использовать в std::vector
, поскольку std::vector
ожидает, что сможет скопировать его содержимое, и вы не можете скопировать std::auto_ptr
в обычном смысле. Копирование означает создание двух идентичных вещей, и если бы у вас было два идентичных std::auto_ptr
, то, на что они указывали, было бы дважды освобождено, когда они вышли из области видимости. (Вместо этого происходит то, что копируемый из auto_ptr
внутренний указатель обнуляется, а тот, в который копируется, теперь является тем, чем раньше был старый.)
Используйте shared_ptr
, который часто доступен как boost::shared_ptr
или в Visual C ++ std::tr1::shared_ptr
, и который будет в стандартной библиотеке C ++ 0x, или используйте все, что имеет Qt. Они могут быть скопированы и, следовательно, могут помещаться в контейнеры.