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

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

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

main.cpp

main.cpp

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Suggested prompts:

Can you explain what a circular reference is in more detail?

How does a `std::weak_ptr` actually prevent memory leaks?

Can you show an example of code with and without `std::weak_ptr`?

Awesome!

Completion rate improved to 5.56

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

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

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

main.cpp

main.cpp

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