В C++ пришло на смену std::auto_ptr:
std::unique_ptrstd::shared_ptrstd::weak_ptrПричины замены std::auto_ptr:
std::auto_ptr передавало владение, оставляя исходный указатель нулевым. Это приводило к непредсказуемому поведению и ошибкам.std::vector) из-за его семантики владения при копировании.Характеристики новых смарт-указателей:
| Смарт-указатель | Владение | Копирование/Перемещение | Назначение |
|---|---|---|---|
std::unique_ptr | Исключительное | Только перемещение | Уникальное владение ресурсом. |
std::shared_ptr | Совместное (разделенное) | Копирование допускается | Разделение владения одним ресурсом между несколькими указателями. |
std::weak_ptr | Не владеет | Копирование допускается | Предотвращение циклических ссылок при использовании std::shared_ptr. |
Пример использования std::unique_ptr (замена std::auto_ptr):
c
Пример использования std::shared_ptr:
c
Использование этих смарт-указателей делает управление памятью в C++ более безопасным и предсказуемым, избегая проблем, присущих std::auto_ptr.