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

bookReferencias 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.cpp

main.cpp

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?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

What type of smart pointer should I use to fix circular references?

Can you explain how to avoid circular references with smart pointers?

Can you provide an example of fixing this issue?

Awesome!

Completion rate improved to 5.56

bookReferencias Circulares y Shared Pointers

Desliza para mostrar el menú

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.cpp

main.cpp

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?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3
some-alt