weak_ptr используется для устранения циклических зависимостей между объектами, управляемыми shared_ptr. Он не увеличивает счетчик ссылок объекта и не предотвращает его уничтожение. Позволяет безопасно проверить, существует ли объект, на который он ссылается, и получить временный shared_ptr (с помощью lock()) для безопасного доступа.
Пример использования:
c
Основные сценарии применения:
shared_ptr.weak_ptr на родителя, чтобы избежать циклической ссылки.Сравнение shared_ptr и weak_ptr:
| Характеристика | shared_ptr | weak_ptr |
|---|---|---|
| Счетчик ссылок | Увеличивает | Не увеличивает |
| Предотвращение удаления | Да | Нет |
| Доступ к объекту | Прямой | Через lock() (возвращает shared_ptr) |
| Циклические ссылки | Может создавать | Предотвращает |
| Размер | Обычно больше из-за контрольного блока | Обычно меньше |