Heim > Artikel > Backend-Entwicklung > Warum können Sie „shared_from_this“ nicht in einem Konstruktor verwenden?
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());
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!