std::weak_ptr используется для создания невладеющих ссылок на объект, управляемый std::shared_ptr. Это позволяет избежать циклических зависимостей между объектами, которые владеют друг другом посредством shared_ptr, тем самым предотвращая утечки памяти.
Её ключевые особенности:
weak_ptr из shared_ptr, он не увеличивает счетчик сильных ссылок. Счетчик слабых ссылок увеличивается, но он не влияет на время жизни объекта.weak_ptr позволяет проверить, существует ли еще объект, на который он ссылается, с помощью метода expired() или путем попытки преобразования в shared_ptr с помощью метода lock(). Метод lock() возвращает shared_ptr, если объект все еще жив, или пустой shared_ptr в противном случае.weak_ptr. Если два объекта владеют друг другом посредством shared_ptr, счетчик ссылок никогда не опустится до нуля, и память, занимаемая объектами, не будет освобождена. Используя weak_ptr для одной из ссылок, можно разрешить эту циклическую зависимость.Пример:
cpp
В этом примере, если бы B::a_ptr был std::shared_ptr, объекты A и B никогда бы не были уничтожены, так как каждый объект держал бы сильную ссылку на другой. Использование std::weak_ptr для B::a_ptr предотвращает эту проблему.