Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Referências Circulares e Shared Pointers | Ponteiros Compartilhados
C++ Smart Pointers

bookReferências Circulares e Shared Pointers

Ao trabalhar com std::shared_ptr, você pode encontrar um problema conhecido como referência circular. Uma referência circular ocorre quando dois objetos mantêm referências shared_ptr um ao outro. Como shared_ptr usa contagem de referências, a contagem nunca chega a zero, causando um vazamento de memória.

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; }

Há uma maneira de corrigir esse problema, você precisa usar um tipo diferente de smart pointer.

question mark

Que problema uma referência circular causa em std::shared_ptr?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

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

bookReferências Circulares e Shared Pointers

Deslize para mostrar o menu

Ao trabalhar com std::shared_ptr, você pode encontrar um problema conhecido como referência circular. Uma referência circular ocorre quando dois objetos mantêm referências shared_ptr um ao outro. Como shared_ptr usa contagem de referências, a contagem nunca chega a zero, causando um vazamento de memória.

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; }

Há uma maneira de corrigir esse problema, você precisa usar um tipo diferente de smart pointer.

question mark

Que problema uma referência circular causa em std::shared_ptr?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 3
some-alt