Heim > Backend-Entwicklung > C++ > Hauptteil

Wie verhindert man zirkuläre Abhängigkeiten bei der Verwendung von std::shared_ptr von „this'?

Linda Hamilton
Freigeben: 2024-10-29 04:43:29
Original
522 Leute haben es durchsucht

How to Prevent Circular Dependencies When Using std::shared_ptr of

std::shared_ptr von „this“: Zirkuläre Abhängigkeiten verstehen

Das Erben von std::enable_shared_from_this ist der Schlüssel zum Auflösen des „std.“ ::shared_ptr dieses" Rätsels. Wenn Sie dies aktivieren, können Sie .shared_from_this() aufrufen, um einen gemeinsamen Zeiger auf das aktuelle Objekt zu erhalten. Dies führt jedoch zu einer potenziellen zirkulären Abhängigkeit zwischen den übergeordneten und untergeordneten Objekten.

Um dieses Problem zu beheben, wird empfohlen, std::weak_ptr für den Verweis des untergeordneten Objekts auf das übergeordnete Objekt zu verwenden. Dies verhindert die Bildung starker Zirkelverweise und schützt vor Ressourcenlecks. Der geänderte Code zeigt, wie dieser Ansatz implementiert wird:

<br>class A : public std::enable_shared_from_this<a> {<br>public:</a></p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">void addChild(std::shared_ptr<B> child) {
    children.push_back(child);
    child->setParent(shared_from_this());
}
Nach dem Login kopieren

private :

std::list<std::weak_ptr<B>> children;
Nach dem Login kopieren

};

Klasse B {
öffentlich:

void setParent(std::shared_ptr<A> parent) {
    this->parent = parent;
}
Nach dem Login kopieren

privat:

std::shared_ptr<A> parent;
Nach dem Login kopieren

};

Es ist wichtig zu beachten, dass der Aufruf von .shared_from_this() erfordert, dass das aktuelle Objekt zum Zeitpunkt des Aufrufs von std::shared_ptr verwaltet wird. Dies bedeutet, dass das Erstellen solcher Objekte auf dem Stapel nicht mehr möglich ist und der Aufruf von .shared_from_this() von einem Konstruktor oder Destruktor aus im Allgemeinen nicht empfohlen wird.

Das obige ist der detaillierte Inhalt vonWie verhindert man zirkuläre Abhängigkeiten bei der Verwendung von std::shared_ptr von „this'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!