shared_from_this-Konstruktorbeschränkung: Technische Erklärung
Im Gegensatz zu häufigen Missverständnissen ist die Unfähigkeit, shared_from_this in einem Konstruktor zu verwenden, auf technische Einschränkungen zurückzuführen. Um zu verstehen, warum, tauchen wir in die Interna seiner Implementierung ein.
shared_from_this basiert auf einem privaten Mitglied in der Basisklasse, enable_shared_from_this, um einen schwachen_ptr zu speichern. Dieser schwache_ptr wird jedoch erst ganz am Ende des Konstruktionsprozesses initialisiert. Das bedeutet, dass, wenn der Konstruktor für die abgeleitete Klasse (z. B. Person) ausgeführt wird, noch kein shared_ptr vorhanden ist, der auf das Objekt zeigt.
Um dies zu veranschaulichen, betrachten Sie den Codeausschnitt aus dem Buch:
class Person : public std::enable_shared_from_this<Person> { ... };
Die Funktion „shared_from_this“ innerhalb der Klasse „Person“ würde versuchen, den versteckten „weak_ptr“ mithilfe des ersten „shared_ptr“ zu initialisieren, der auf ein Objekt vom Typ „Person“ zeigt. Da jedoch der Konstruktor für Person derzeit ausgeführt wird, existiert kein solcher shared_ptr.
Diese technische Einschränkung entsteht, weil der Konstruktor für shared_ptr aufgerufen werden muss, bevor eine Aktion für das Objekt ausgeführt wird, auf das verwiesen wird. Daher kann der shared_from_this-Mechanismus nicht im Konstruktor der abgeleiteten Klasse funktionieren, da zu diesem Zeitpunkt kein shared_ptr verfügbar ist.
Das obige ist der detaillierte Inhalt vonWarum kann „shared_from_this' nicht in einem Konstruktor verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!