Heim >Backend-Entwicklung >C++ >Wie kann ich mithilfe von „std::shared_ptr' sicher einen Verweis auf „dies' mit untergeordneten Objekten teilen?

Wie kann ich mithilfe von „std::shared_ptr' sicher einen Verweis auf „dies' mit untergeordneten Objekten teilen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-29 11:46:30434Durchsuche

How Can I Safely Share a Reference to

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!

Stellungnahme:
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