Назад к вопросам
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 для разрыва цикла.