Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Referencias Circulares y Shared Pointers | Punteros Compartidos
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
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.

cpp

main

copy
1234567891011121314151617181920212223242526
#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.

question mark

¿Qué problema causa una referencia circular en std::shared_ptr?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3
We're sorry to hear that something went wrong. What happened?
some-alt