Heim > Backend-Entwicklung > C++ > Hauptteil

Warum können Sie „shared_from_this' nicht in einem Konstruktor verwenden?

DDD
Freigeben: 2024-11-06 06:14:02
Original
643 Leute haben es durchsucht

Why Can't You Use `shared_from_this` in a Constructor?

Die Unfähigkeit von Shared_from_this in Konstruktoren verstehen

Die Abfrage konzentriert sich auf die Einschränkungen der Verwendung von shared_from_this innerhalb eines Klassenkonstruktors. Um dies zu beheben, untersuchen wir die technischen Gründe für diese Einschränkung.

Das versteckte Mitglied von Shared_ptr

Shared_from_this ist selbstreferenziell und basiert auf einem internen, dem hinzugefügten Mitglied „weak_ptr“. enable_shared_from_this Basisklasse. Dieser schwache_ptr wird jedoch erst festgelegt, nachdem der erste shared_ptr für Person erstellt wurde.

Erstellungszeitleiste

Ein Klassenkonstruktor ist für die Initialisierung seiner Mitglieder verantwortlich, einschließlich der Erstellung von „enable_shared_from_this“. Basisklasseninstanz. Während der anfänglichen Objektkonstruktion gibt es noch keinen shared_ptr, der auf die Person verweist.

Die Verbindung zwischen Shared_ptr und Weak_ptr

Beachten Sie den folgenden Ausschnitt:

 std::shared_ptr<Person> p(new Person());
Nach dem Login kopieren

Bevor der Konstruktor von p (der shared_ptr) aufgerufen wird, muss der Ausdruck new Person() ausgewertet werden, was zur Konstruktion des Person-Objekts führt. Da der Konstruktor von shared_ptr ausgeführt wird, nachdem das Person-Objekt erstellt wurde, existiert das shared_ptr-Objekt während der Konstruktorphase von Person nicht, was die Verwendung von shared_from_this unmöglich macht.

Fazit

Technisch gesehen , shared_from_this ist in einem Konstruktor unbrauchbar, da der erforderliche shared_ptr, der den internen schwachen_ptr initialisiert, erst existiert, wenn das Objekt vollständig erstellt ist. Dies verhindert, dass shared_from_this die notwendige selbstreferenzielle Verbindung aufbaut.

Das obige ist der detaillierte Inhalt vonWarum können Sie „shared_from_this' nicht in einem Konstruktor verwenden?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!