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

В каких случаях уместно применять std::weak_ptr в программе на C++?

Компании, где спрашивали
Samsung Research CenterSamsung Research Center

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

sobes.tech AI

std::weak_ptr используется в C++ для решения проблемы циклических ссылок, которые могут возникать при использовании std::shared_ptr.

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

weak_ptr не увеличивает счетчик ссылок, а лишь ссылается на объект, управляемый shared_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 не увеличивает счетчик
}

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