Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Циклічні Посилання та Спільні Вказівники | Спільні Вказівники
Розумні Вказівники C++

bookЦиклічні Посилання та Спільні Вказівники

Під час роботи з std::shared_ptr ви можете зіткнутися з проблемою, відомою як циклічне посилання. Циклічне посилання виникає, коли два об'єкти утримують shared_ptr посилання один на одного. Оскільки shared_ptr використовує підрахунок посилань, кількість ніколи не досягає нуля, що спричиняє витік пам'яті.

main.cpp

main.cpp

copy
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; }

Існує спосіб вирішити цю проблему, вам потрібно використовувати інший тип розумного вказівника.

question mark

Яку проблему викликає циклічне посилання в std::shared_ptr?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 5.56

bookЦиклічні Посилання та Спільні Вказівники

Свайпніть щоб показати меню

Під час роботи з std::shared_ptr ви можете зіткнутися з проблемою, відомою як циклічне посилання. Циклічне посилання виникає, коли два об'єкти утримують shared_ptr посилання один на одного. Оскільки shared_ptr використовує підрахунок посилань, кількість ніколи не досягає нуля, що спричиняє витік пам'яті.

main.cpp

main.cpp

copy
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; }

Існує спосіб вирішити цю проблему, вам потрібно використовувати інший тип розумного вказівника.

question mark

Яку проблему викликає циклічне посилання в std::shared_ptr?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 3
some-alt