Sobes.tech
Назад к вопросам
Junior — Middle
83

Для чего используется std::weak_ptr и с какой задачей он помогает справиться в управлении памятью?

Компании, где спрашивали
ГК Адепт

Ответ от нейросети

sobes.tech AI

std::weak_ptr используется для решения проблемы циклических ссылок при управлении памятью с помощью умных указателей (std::shared_ptr).

Когда два или более объекта ссылаются друг на друга через shared_ptr, счетчик ссылок никогда не становится нулём, и память не освобождается — возникает утечка.

weak_ptr не увеличивает счетчик ссылок, но позволяет безопасно получить доступ к объекту, если он ещё существует. Это помогает:

  • Разорвать циклы владения, предотвращая утечки памяти.
  • Проверять, существует ли объект, прежде чем использовать его.

Пример:

#include <memory>
#include <iostream>

struct Node {
    std::shared_ptr<Node> next;
    std::weak_ptr<Node> prev; // weak_ptr для предотвращения цикла
};

int main() {
    auto first = std::make_shared<Node>();
    auto second = std::make_shared<Node>();

    first->next = second;
    second->prev = first; // weak_ptr не увеличивает счетчик

    // Когда first и second выходят из области видимости, память освобождается корректно
}

Таким образом, std::weak_ptr помогает управлять жизненным циклом объектов без создания циклических зависимостей.