Kursinhalt
C++ Smart Pointers
C++ Smart Pointers
1. Einführung in Smart Pointers
Aufbrechen von Zirkulären Referenzen mit Weak Pointers
Schwache Zeiger sind dazu gedacht, zirkuläre Referenzen zu durchbrechen. Indem wir einen std::shared_ptr
in einer zirkulären Abhängigkeit durch einen std::weak_ptr
ersetzen, verhindern wir, dass Objekte unbeabsichtigt die Lebensdauer des jeweils anderen verlängern, was eine ordnungsgemäße Zerstörung ermöglicht.
main
#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 }
Das Problem der zirkulären Referenz wird gelöst, indem next
von einem std::shared_ptr
zu einem std::weak_ptr
geändert wird. Folgen Sie den Kommentaren im Code für ein klareres Verständnis. Führen Sie den Code aus, um zu bestätigen, dass die Destruktoren jetzt ordnungsgemäß aufgerufen werden keine Speicherlecks!
War alles klar?
Danke für Ihr Feedback!
Abschnitt 4. Kapitel 3