Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Références Circulaires et Shared Pointers | Pointeurs Partagés
Pointeurs Intelligents C++
course content

Contenu du cours

Pointeurs Intelligents C++

Pointeurs Intelligents C++

1. Introduction aux Pointeurs Intelligents
2. Pointeurs Uniques
3. Pointeurs Partagés
4. Pointeurs Faibles
5. Sujets Avancés

book
Références Circulaires et Shared Pointers

Lorsque vous travaillez avec std::shared_ptr, vous pourriez rencontrer un problème connu sous le nom de référence circulaire. Une référence circulaire se produit lorsque deux objets détiennent des références shared_ptr l'un à l'autre. Étant donné que shared_ptr utilise le comptage de références, le compte n'atteint jamais zéro, provoquant une fuite de mémoire.

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

Il existe un moyen de résoudre ce problème, vous devez utiliser un type différent de smart pointer.

question mark

Quel problème une référence circulaire cause-t-elle dans std::shared_ptr ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 3
We're sorry to hear that something went wrong. What happened?
some-alt