Розрив Циклічних Посилань за Допомогою Слабких Вказівників
Слабкі вказівники призначені для розриву циклічних посилань. Замінюючи std::shared_ptr
у циклічній залежності на std::weak_ptr
, ми запобігаємо ненавмисному продовженню часу життя об'єктів один одного, що дозволяє їх правильне знищення.
main.cpp
12345678910111213141516171819202122232425#include <iostream> #include <memory> class Node { public: Node() { std::cout << "Node constructed." << std::endl; } ~Node() { std::cout << "Node destructed." << std::endl; } // A weak pointer to the next element prevents circular ownership. std::weak_ptr<Node> next; }; int main() { // Creating three Node objects. std::shared_ptr<Node> node1 = std::make_shared<Node>(); std::shared_ptr<Node> node2 = std::make_shared<Node>(); std::shared_ptr<Node> node3 = std::make_shared<Node>(); // Creating a list where the last node's next is a weak pointer node1->next = node2; node2->next = node3; node3->next = node1; // Now when node1, node2, and node3 go out of scope, their destructors will be called }
Проблема циклічного посилання вирішується шляхом зміни next
з std::shared_ptr
на std::weak_ptr
. Слідуйте коментарям у коді для кращого розуміння. Запустіть код, щоб підтвердити, що деструктори тепер викликаються правильно без витоків пам'яті!
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 5.56
Розрив Циклічних Посилань за Допомогою Слабких Вказівників
Свайпніть щоб показати меню
Слабкі вказівники призначені для розриву циклічних посилань. Замінюючи std::shared_ptr
у циклічній залежності на std::weak_ptr
, ми запобігаємо ненавмисному продовженню часу життя об'єктів один одного, що дозволяє їх правильне знищення.
main.cpp
12345678910111213141516171819202122232425#include <iostream> #include <memory> class Node { public: Node() { std::cout << "Node constructed." << std::endl; } ~Node() { std::cout << "Node destructed." << std::endl; } // A weak pointer to the next element prevents circular ownership. std::weak_ptr<Node> next; }; int main() { // Creating three Node objects. std::shared_ptr<Node> node1 = std::make_shared<Node>(); std::shared_ptr<Node> node2 = std::make_shared<Node>(); std::shared_ptr<Node> node3 = std::make_shared<Node>(); // Creating a list where the last node's next is a weak pointer node1->next = node2; node2->next = node3; node3->next = node1; // Now when node1, node2, and node3 go out of scope, their destructors will be called }
Проблема циклічного посилання вирішується шляхом зміни next
з std::shared_ptr
на std::weak_ptr
. Слідуйте коментарям у коді для кращого розуміння. Запустіть код, щоб підтвердити, що деструктори тепер викликаються правильно без витоків пам'яті!
Дякуємо за ваш відгук!