Циклічні Посилання та Спільні Вказівники
Під час роботи з std::shared_ptr
ви можете зіткнутися з проблемою, відомою як циклічне посилання. Циклічне посилання виникає, коли два об'єкти утримують shared_ptr
посилання один на одного. Оскільки shared_ptr
використовує підрахунок посилань, кількість ніколи не досягає нуля, що спричиняє витік пам'яті.
main.cpp
1234567891011121314151617181920212223242526#include <iostream> #include <memory> class B; // Forward declaration class A { public: std::shared_ptr<B> p_b; ~A() { std::cout << "A destroyed\n"; } }; class B { public: ~B() { std::cout << "B destroyed\n"; } std::shared_ptr<A> p_a; }; int main() { std::shared_ptr<A> a = std::make_shared<A>(); std::shared_ptr<B> b = std::make_shared<B>(); a->p_b = b; b->p_a = a; }
Існує спосіб вирішити цю проблему, вам потрібно використовувати інший тип розумного вказівника.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 5.56
Циклічні Посилання та Спільні Вказівники
Свайпніть щоб показати меню
Під час роботи з std::shared_ptr
ви можете зіткнутися з проблемою, відомою як циклічне посилання. Циклічне посилання виникає, коли два об'єкти утримують shared_ptr
посилання один на одного. Оскільки shared_ptr
використовує підрахунок посилань, кількість ніколи не досягає нуля, що спричиняє витік пам'яті.
main.cpp
1234567891011121314151617181920212223242526#include <iostream> #include <memory> class B; // Forward declaration class A { public: std::shared_ptr<B> p_b; ~A() { std::cout << "A destroyed\n"; } }; class B { public: ~B() { std::cout << "B destroyed\n"; } std::shared_ptr<A> p_a; }; int main() { std::shared_ptr<A> a = std::make_shared<A>(); std::shared_ptr<B> b = std::make_shared<B>(); a->p_b = b; b->p_a = a; }
Існує спосіб вирішити цю проблему, вам потрібно використовувати інший тип розумного вказівника.
Дякуємо за ваш відгук!