Contenido del Curso
C++ Smart Pointers
C++ Smart Pointers
1. Introducción a los Punteros Inteligentes
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.
main
#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!
¿Todo estuvo claro?
¡Gracias por tus comentarios!
Sección 4. Capítulo 3