std::shared_ptr von „diesem“ Rätsel
Im Bereich der intelligenten Zeiger können Sie auf ein Szenario stoßen, in dem ein Objekt der Klasse A, das Elternteil, muss einen Verweis auf sich selbst mit seinem Kind, Objekt der Klasse B, teilen. Die Übergabe eines einfachen Zeigers auf „dies“ kann jedoch zu einem unsinnigen Fehler führen.
Die Lösung liegt im Rätselhaften std::enable_shared_from_this-Tool. Wenn Sie von dieser Klasse erben, können Sie innerhalb der Klasse auf .shared_from_this() zugreifen und erhalten so einen gemeinsamen Besitz des aktuellen Objekts.
Dennoch ergibt sich aus dieser Vernetzung eine entscheidende Einschränkung: das Potenzial für zirkuläre Abhängigkeiten. Um die Fallstricke von Ressourcenlecks zu vermeiden, ist es ratsam, beim Erstellen solcher Abhängigkeiten std::weak_ptr einzuführen.
Wenn Sie diesen überarbeiteten Ansatz übernehmen, könnte Ihr überarbeiteter Code wie folgt aussehen:
<code class="cpp">class A : public std::enable_shared_from_this<A> { public: void addChild(std::shared_ptr<B> child) { children.push_back(child); child->setParent(shared_from_this()); // Corrected reference passing } private: std::list<std::weak_ptr<B>> children; // Using weak_ptr to prevent circular references }; class B { public: void setParent(std::shared_ptr<A> parent) { this->parent = parent; } private: std::shared_ptr<A> parent; };</code>
Beachten Sie, dass der Aufruf von .shared_from_this() zum Zeitpunkt des Aufrufs den Besitz des Objekts durch einen std::shared_ptr erfordert. Dies eliminiert die Möglichkeit von Stack-zugewiesenen Objekten und schränkt generell Aufrufe von .shared_from_this() aus Konstruktoren oder Destruktoren ein.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von „std::shared_ptr' sicher einen Verweis auf „dies' mit untergeordneten Objekten teilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!