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

Каким образом можно вызвать утечку памяти при использовании умных указателей?

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

sobes.tech AI

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

Например, если два объекта содержат shared_ptr друг на друга, счетчик ссылок никогда не станет нулём, и память не освободится:

#include <memory>

struct B; // Предварительное объявление

struct A {
    std::shared_ptr<B> b_ptr;
};

struct B {
    std::shared_ptr<A> a_ptr;
};

int main() {
    auto a = std::make_shared<A>();
    auto b = std::make_shared<B>();
    a->b_ptr = b;
    b->a_ptr = a; // Циклическая ссылка
    // Ни a, ни b не будут удалены автоматически
}

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