auto_ptr
не уникальный случай.Это не "auto_ptr
или ничего".auto_ptr
является одним примером общей идиомы программирования, которая обрабатывает распределение / освобождение ресурсов без утечек.
Эта идиома называется RAII .
Это означает, что ресурсы должныбыть сопоставленным с объектом, который управляет временем жизни ресурса и обеспечивает его очистку в подходящее время.
В случае auto_ptr
это делается просто путем сохранения в классе указателя навыделенной памяти, и в деструкторе этого класса вызовите delete
для указателя.
Вы можете сделать то же самое с вашими собственными классами RAII, используя их вместо auto_ptr
.Но есть и другие типы интеллектуальных указателей, которые предпочтительнее, чем auto_ptr
(что на самом деле устарело в C ++ 11).
Это shared_ptr
(умный указатель с подсчетом ссылок, который удаляет объект, когда существует последняя ссылка), и scoped_ptr
(более безопасный, но ограниченный, эквивалент auto_ptr
, который может быть реализован в C ++ 03), и unique_ptr
, замена C ++ 11для auto_ptr
, который решает проблемы, которые auto_ptr
имели.unique_ptr
можно безопасно использовать в массивах и стандартных контейнерах.
Поэтому вам не следует использовать auto_ptr
, но вам абсолютно необходимо использовать другие типы интеллектуальных указателей и RAII в целом.