Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Quebrando Referências Circulares com Weak Pointers | Ponteiros Fracos
C++ Smart Pointers

bookQuebrando Referências Circulares com Weak Pointers

Os ponteiros fracos são projetados para quebrar referências circulares. Ao substituir um std::shared_ptr em uma dependência circular por um std::weak_ptr, evitamos que os objetos estendam involuntariamente a vida útil uns dos outros, permitindo a destruição adequada.

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 }

O problema de referência circular é resolvido ao mudar next de um std::shared_ptr para um std::weak_ptr. Siga os comentários no código para uma compreensão mais clara. Execute o código para confirmar que os destruidores agora são chamados corretamente sem vazamentos de memória!

question mark

O seguinte código possui dois ponteiros compartilhados A e B ambos compartilhando um recurso. Modifique-o para que B se torne um ponteiro fraco.

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 5.56

bookQuebrando Referências Circulares com Weak Pointers

Deslize para mostrar o menu

Os ponteiros fracos são projetados para quebrar referências circulares. Ao substituir um std::shared_ptr em uma dependência circular por um std::weak_ptr, evitamos que os objetos estendam involuntariamente a vida útil uns dos outros, permitindo a destruição adequada.

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 }

O problema de referência circular é resolvido ao mudar next de um std::shared_ptr para um std::weak_ptr. Siga os comentários no código para uma compreensão mais clara. Execute o código para confirmar que os destruidores agora são chamados corretamente sem vazamentos de memória!

question mark

O seguinte código possui dois ponteiros compartilhados A e B ambos compartilhando um recurso. Modifique-o para que B se torne um ponteiro fraco.

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 3
some-alt