


Wie kann ich ein „std::shared_ptr' von „this' sicher an ein verwandtes Objekt übergeben?
Oct 28, 2024 pm 09:01 PMDas „std::shared_ptr“-Dilemma verstehen
Bei der Verwendung von Smart Pointern tritt häufig ein Szenario auf, in dem zwei verwandte Objekte, A und B, Zugriff benötigen gegenseitig. Die Übergabe von std::shared_ptr zum Herstellen dieser Verbindung wird jedoch zu einer Herausforderung.
Betrachten Sie beispielsweise Klasse A, das übergeordnete Objekt, das ein untergeordnetes Objekt B hinzufügen muss. Die addChild-Methode des übergeordneten Objekts sollte idealerweise ein std:: übergeben. shared_ptr an das untergeordnete Element, damit es auf das übergeordnete Element verweisen kann.
Ein direkter untergeordneter->setParent(this)-Versuch schlägt jedoch fehl, da dieser Zeiger ein R-Wert ist. Um dieses Problem zu lösen, bietet C std::enable_shared_from_this an.
Lösung: std::enable_shared_from_this
std::enable_shared_from_this ist eine Klassenvorlage, die das Teilen eines Objekts über std::shared_ptr erleichtert. Indem Sie davon erben, erhalten Sie Zugriff auf shared_from_this(), das den notwendigen std::shared_ptr bereitstellt, wie im geänderten Code zu sehen ist:
<code class="cpp">class A : public std::enable_shared_from_this<A> { ... child->setParent(shared_from_this()); // now valid };</code>
Zusätzlich, um zirkuläre Abhängigkeiten zu verhindern, die zu Speicherlecks führen könnten , ist es ratsam, std::weak_ptr für Kinder zu verwenden, die von der Existenz ihrer Eltern abhängig sind:
<code class="cpp">std::list<std::weak_ptr<B>> children; // now using weak_ptr</code>
Vorsichtsmaßnahmen
Es ist wichtig zu beachten, dass .shared_from_this() nur beim Aufruf aufgerufen werden sollte Das Objekt wird von std::shared_ptr verwaltet. Dies bedeutet, dass es nicht auf dem Stapel erstellt werden kann und normalerweise nicht in Konstruktoren oder Destruktoren aufgerufen werden kann.
Das obige ist der detaillierte Inhalt vonWie kann ich ein „std::shared_ptr' von „this' sicher an ein verwandtes Objekt übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
