Чтобы предоставить немного больше боеприпасов для лагеря 'избежать std::auto_ptr
': auto_ptr
устарело в следующем стандарте (C ++ 0x). Я думаю, что одного этого патрона достаточно для любого аргумента, чтобы использовать что-то еще.
Однако, как упоминал Конрад Рудольф , замена по умолчанию для auto_ptr
, вероятно, должна быть boost::scoped_ptr
. Семантика scoped_ptr
более точно соответствует семантике auto_ptr
, и она предназначена для аналогичного использования. Следующий стандарт C ++ 09 будет иметь нечто подобное, называемое unique_ptr.
Тем не менее, использование shared_ptr
везде, где следует использовать scoped_ptr
, ничего не сломает, просто добавит немного неэффективности, чтобы справиться со счетчиком ссылок, если объект никогда не будет совместно использоваться. Так что для частных указателей, которые никогда не будут переданы другому объекту - используйте scoped_ptr
. Если указатель будет передан другому объекту (это включает в себя его использование в контейнерах или все, что вы хотите сделать, это передать право владения, а не сохранить или поделиться им) - используйте shared_ptr
.