Contenido del Curso
C++ Smart Pointers
C++ Smart Pointers
1. Introducción a los Punteros Inteligentes
Referencias Circulares y Shared Pointers
Al trabajar con std::shared_ptr
, podrías encontrarte con un problema conocido como una referencia circular. Una referencia circular ocurre cuando dos objetos mantienen referencias shared_ptr
entre sí. Dado que shared_ptr
utiliza conteo de referencias, el conteo nunca llega a cero, causando una fuga de memoria.
main
#include <iostream> #include <memory> class B; // Forward declaration class A { public: std::shared_ptr<B> p_b; ~A() { std::cout << "A destroyed\n"; } }; class B { public: ~B() { std::cout << "B destroyed\n"; } std::shared_ptr<A> p_a; }; int main() { std::shared_ptr<A> a = std::make_shared<A>(); std::shared_ptr<B> b = std::make_shared<B>(); a->p_b = b; b->p_a = a; }
Hay una manera de solucionar este problema, necesitas usar un tipo diferente de smart pointer.
¿Todo estuvo claro?
¡Gracias por tus comentarios!
Sección 3. Capítulo 3