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

Зміст курсу

Розумні Вказівники C++

Розумні Вказівники C++

1. Вступ до Розумних Вказівників
2. Унікальні Вказівники
3. Спільні Вказівники
4. Слабкі Вказівники
5. Просунуті Теми

book
Розрив Циклічних Посилань за Допомогою Слабких Вказівників

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

cpp

main

copy
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. Слідуйте коментарям у коді для кращого розуміння. Запустіть код, щоб підтвердити, що деструктори тепер викликаються правильно без витоків пам'яті!

question mark

Наступний код має два спільних вказівники A та B, які обидва ділять ресурс. Змініть його так, щоб B став слабким вказівником.

Select the correct answer

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

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

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

Секція 4. Розділ 3
Ми дуже хвилюємося, що щось пішло не так. Що трапилося?
some-alt