Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpUpWc 358 of 696 menu
◀ ▶

Цикл с weak_ptr без утечки в C++

Слабая связь в одну сторону разрывает цикл двух объектов и дает им освободить память.

Слабая связь в одном направлении разрывает замыкание: weak_ptr наблюдает за соседом, но не продлевает его жизнь. Запишем две структуры, свяжем их и выведем сообщения из деструкторов при выходе из main:

#include <iostream> #include <memory> struct SideB; struct SideA { std::shared_ptr<SideB> peer; ~SideA() { std::cout << "A gone\n"; } }; struct SideB { std::weak_ptr<SideA> back; ~SideB() { std::cout << "B gone\n"; } }; int main() { auto a = std::make_shared<SideA>(); auto b = std::make_shared<SideB>(); a->peer = b; b->back = a; return 0; }

Сделайте struct Host с shared_ptr<Guest> и struct Guest с weak_ptr<Host>. Свяжите два make_shared-объекта и добавьте деструкторы с разными словами. Убедитесь, что оба срабатывают при завершении программы.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить