Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Casser les Références Circulaires avec des Pointeurs Faibles | Pointeurs Faibles
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
Casser les Références Circulaires avec des Pointeurs Faibles

Les pointeurs faibles sont conçus pour briser les références circulaires. En remplaçant un std::shared_ptr dans une dépendance circulaire par un std::weak_ptr, nous empêchons les objets de prolonger involontairement la durée de vie les uns des autres, permettant ainsi une destruction appropriée.

cpp

main

copy
12345678910111213141516171819202122232425
#include <iostream> #include <memory> class Node { public: Node() { std::cout << "Node constructed." << std::endl; } ~Node() { std::cout << "Node destructed." << std::endl; } // A weak pointer to the next element prevents circular ownership. std::weak_ptr<Node> next; }; int main() { // Creating three Node objects. std::shared_ptr<Node> node1 = std::make_shared<Node>(); std::shared_ptr<Node> node2 = std::make_shared<Node>(); std::shared_ptr<Node> node3 = std::make_shared<Node>(); // Creating a list where the last node's next is a weak pointer node1->next = node2; node2->next = node3; node3->next = node1; // Now when node1, node2, and node3 go out of scope, their destructors will be called }

Le problème de référence circulaire est résolu en changeant next d'un std::shared_ptr à un std::weak_ptr. Suivez les commentaires dans le code pour une compréhension plus claire. Exécutez le code pour confirmer que les destructeurs sont maintenant appelés correctement pas de fuites de mémoire !

question mark

Le code suivant a deux pointeurs partagés A et B partageant tous deux une ressource. Modifiez-le pour que B devienne un pointeur faible.

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

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