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()); }
private :
std::list<std::weak_ptr<B>> children;
};
Klasse B {
öffentlich:
void setParent(std::shared_ptr<A> parent) { this->parent = parent; }
privat:
std::shared_ptr<A> parent;
};
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!