Inhaltsverzeichnis
Das „std::shared_ptr“-Dilemma verstehen
Lösung: std::enable_shared_from_this
Vorsichtsmaßnahmen
Heim Backend-Entwicklung C++ Wie kann ich ein „std::shared_ptr' von „this' sicher an ein verwandtes Objekt übergeben?

Wie kann ich ein „std::shared_ptr' von „this' sicher an ein verwandtes Objekt übergeben?

Oct 28, 2024 pm 09:01 PM

How Can I Safely Pass a `std::shared_ptr` of `this` to a Related Object?

Das „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&lt;A&gt; {
...
child-&gt;setParent(shared_from_this()); // now valid
};</code>
Nach dem Login kopieren

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&lt;std::weak_ptr&lt;B&gt;&gt; children; // now using weak_ptr</code>
Nach dem Login kopieren

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!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

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

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

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

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

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

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

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

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

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

See all articles