Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Aufbrechen von Zirkulären Referenzen mit Weak Pointers | Schwache Zeiger
C++ Smart Pointers
course content

Kursinhalt

C++ Smart Pointers

C++ Smart Pointers

1. Einführung in Smart Pointers
2. Einzigartige Zeiger
3. Gemeinsame Zeiger
4. Schwache Zeiger
5. Fortgeschrittene Themen

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

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 }

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!

question mark

Der folgende Code hat zwei Shared Pointers A und B, die beide eine Ressource teilen. Ändern Sie ihn so, dass B ein schwacher Zeiger wird.

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

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