std::unique_ptr, std::shared_ptr, std::weak_ptr.
-
std::unique_ptr:
- Эксклюзивное владение объектом.
- Не может быть скопирован, но может быть перемещен (
std::move).
- Автоматически удаляет объект при выходе из области видимости или уничтожении
unique_ptr.
- Легковесен, не имеет накладных расходов на счетчик ссылок.
cpp
-
std::shared_ptr:
- Совместное владение объектом.
- Использует счетчик ссылок для отслеживания количества объектов
shared_ptr, указывающих на ресурс.
- Объект удаляется, когда последний
shared_ptr на него уничтожается.
- Возможно копирование и перемещение.
- Имеет накладные расходы на счетчик ссылок (обычно аллоцируется отдельно).
- Возможно образование циклических ссылок, что приводит к утечкам памяти.
cpp
-
std::weak_ptr:
- Не владеет объектом.
- Представляет собой "слабую" ссылку на объект, управляемый одним или несколькими
shared_ptr.
- Используется для предотвращения циклических ссылок между
shared_ptr.
- Не увеличивает счетчик ссылок объекта.
- Для безопасного доступа к объекту необходимо преобразовать в
shared_ptr с помощью метода lock(). Если объект уже удален, lock() вернет пустой shared_ptr.
cpp