Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Rompiendo Referencias Circulares con Weak Pointers | Punteros Débiles
C++ Smart Pointers
course content

Contenido del Curso

C++ Smart Pointers

C++ Smart Pointers

1. Introducción a los Punteros Inteligentes
2. Punteros Únicos
3. Punteros Compartidos
4. Punteros Débiles
5. Temas Avanzados

book
Rompiendo Referencias Circulares con Weak Pointers

Los punteros débiles están diseñados para romper referencias circulares. Al reemplazar un std::shared_ptr en una dependencia circular con un std::weak_ptr, evitamos que los objetos extiendan involuntariamente la vida útil de los demás, permitiendo una destrucción adecuada.

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 }

El problema de la referencia circular se resuelve cambiando next de un std::shared_ptr a un std::weak_ptr. Sigue los comentarios en el código para una comprensión más clara. ¡Ejecuta el código para confirmar que los destructores ahora se llaman correctamente sin fugas de memoria!

question mark

El siguiente código tiene dos punteros compartidos A y B que comparten un recurso. Modifícalo para que B se convierta en un puntero débil.

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 3
Lamentamos que algo salió mal. ¿Qué pasó?
some-alt