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
Freigeben: 2024-10-29 11:46:30
Original
400 Leute haben es durchsucht

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>
Nach dem Login kopieren

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!

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 Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage