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
course content

Conteúdo do Curso

C++ Smart Pointers

C++ Smart Pointers

1. Introdução a Ponteiros Inteligentes
2. Ponteiros Únicos
3. Ponteiros Compartilhados
4. Ponteiros Fracos
5. Tópicos Avançados

book
Quebrando 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.

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 }

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
Sentimos muito que algo saiu errado. O que aconteceu?
some-alt