В C++ пришло на смену std::auto_ptr
:
std::unique_ptr
std::shared_ptr
std::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
В C++ пришло на смену std::auto_ptr
:
std::unique_ptr
std::shared_ptr
std::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
Register or sign in to get access to full answers for all questions from the question bank.