Heim  >  Artikel  >  Backend-Entwicklung  >  Warum können Sie „shared_from_this()“ nicht in Konstruktoren verwenden?

Warum können Sie „shared_from_this()“ nicht in Konstruktoren verwenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-06 15:35:02458Durchsuche

Why Can't You Use `shared_from_this()` in Constructors?

Die Einschränkungen von shared_from_this in Konstruktoren verstehen

Wie im Auszug aus „The C Standard Library“ angegeben, steht shared_from_this() vor einem technischen Problem Einschränkung innerhalb der Konstrukteure. Um dieses Konzept zu verstehen, ist es wichtig, in das Innenleben von shared_from_this() einzutauchen.

Die Rolle von Schwachstellen in shared_from_this

shared_from_this() beruht auf einem internen schwach_ptr, um einen schwachen Verweis auf das erstellte Objekt aufrechtzuerhalten. Dieser schwache Zeiger bleibt nicht initialisiert, bis ein starker shared_ptr (ein shared_ptr, dem das Objekt gehört) für das Objekt erstellt wird. Erst nachdem der erste shared_ptr instanziiert wurde, kann „enable_shared_from_this“, eine Basisklasse des Objekts, auf diesen shared_ptr zugreifen und den schwachen_ptr initialisieren.

Das Konstruktions-Timing-Problem

Diese Abhängigkeit von Vorhandene shared_ptrs stellen für Konstrukteure ein Problem dar. Wenn ein Konstruktor aufgerufen wird, ist noch kein shared_ptr vorhanden, der auf das zu erstellende Objekt verweist. Daher kann enable_shared_from_this während der Konstruktion seinen schwachen_ptr nicht initialisieren, wodurch shared_from_this() im Konstruktor unbrauchbar wird.

Ein Beispiel zur Verdeutlichung

Beachten Sie den folgenden Codeausschnitt:

class Person : public std::enable_shared_from_this<Person> {
   ...
};

std::shared_ptr<Person> p(new Person());

In diesem Beispiel wird der Konstruktor von Person() vor dem Konstruktor von shared_ptr p ausgeführt. Das bedeutet, dass während des Person()-Konstruktors kein shared_ptr vorhanden ist, der auf das Person-Objekt zeigt, was enable_shared_from_this daran hindert, seinen schwachen_ptr zu initialisieren und den Zugriff auf shared_from_this() im Konstruktor unzugänglich macht.

Das obige ist der detaillierte Inhalt vonWarum können Sie „shared_from_this()“ nicht in Konstruktoren verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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