Wie hilft „enable_shared_from_this“ bei der Aufrechterhaltung der Objekteigentümerschaft?
Beim Erkunden von Boost.Asio-Beispielen sind Sie möglicherweise auf „enable_shared_from_this“ gestoßen. Trotz Verweis auf die Dokumentation bleibt die Verwendung unklar. Hier finden Sie eine ausführliche Erklärung und ein Beispiel, um den Zweck zu verdeutlichen.
enable_shared_from_this ermöglicht es Ihnen, eine gültige shared_ptr-Instanz für das Objekt zu erstellen, wenn Sie nur Zugriff auf das Objekt selbst haben (dargestellt durch this). Ohne sie wäre es unmöglich, dafür einen shared_ptr zu erhalten, es sei denn, er wäre bereits als Mitglied definiert.
Betrachten Sie das folgende Beispiel:
class Y: public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_from_this(); } };
Hier kann die Methode f() einen gültigen Wert zurückgeben shared_ptr, auch wenn ihm eine Mitgliedsinstanz fehlt. Beachten Sie, dass der folgende Ansatz fehlschlagen würde:
class Y: public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_ptr<Y>(this); } };
Das Ergebnis wären zwei shared_ptrs mit unterschiedlichen Referenzanzahlen. Wenn das Objekt gelöscht wird, wird eines davon zu einer baumelnden Referenz.
Es ist wichtig zu beachten, dass „enable_shared_from_this“ jetzt Teil des C 11-Standards ist, wodurch es sowohl von dort als auch von Boost aus zugänglich ist.
Das obige ist der detaillierte Inhalt vonWie löst „enable_shared_from_this' Probleme mit dem Shared-Pointer-Besitz in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!