Heim >Backend-Entwicklung >C++ >Was ist „enable_shared_from_this' und wie werden „shared_ptr'-Instanzen sicher erstellt?
Was ist „enable_shared_from_this“ und warum ist es nützlich?
Einführung
Beim Erkunden von Boost. Bei Asio-Beispielen kann es sein, dass Sie auf „enable_shared_from_this“ stoßen und Sie über die richtige Anwendung verwirrt sind. Dieser Artikel soll eine umfassende Erklärung und ein Beispiel dafür liefern, wann die Verwendung dieser Klasse sinnvoll ist.
Enable_shared_from_this verstehen
enable_shared_from_this ist eine Hilfsklasse, die die Konvertierung einer regulären Klasse erleichtert Zeiger (wie dieser) in eine gültige shared_ptr-Instanz. Ohne sie wäre der Zugriff auf einen shared_ptr auf das aktuelle Objekt unmöglich, es sei denn, er würde explizit als Mitgliedsvariable gespeichert.
Beispiel und Erklärung
Betrachten Sie das folgende Beispiel:
class Y : public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_from_this(); } }; int main() { shared_ptr<Y> p(new Y); shared_ptr<Y> q = p->f(); assert(p == q); assert(!(p < q || q < p)); // p and q must share ownership }
In diesem Beispiel gibt die f()-Methode einen gültigen shared_ptr zurück, obwohl sie keine Mitgliedsinstanz von hat shared_ptr. Die Klasse enable_shared_from_this ermöglicht diese Konvertierung. Es ist wichtig zu beachten, dass der folgende Ansatz falsch ist:
class Y : public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_ptr<Y>(this); } };
Dies würde zu gemeinsamen Zeigern mit unterschiedlichen Referenzanzahlen führen, was möglicherweise zu fehlenden Referenzen führen würde, wenn das Objekt gelöscht wird.
Fazit
enable_shared_from_this ist ein wertvolles Werkzeug zum Erstellen einer shared_ptr-Instanz des aktuellen Objekts, wenn Sie haben nur Zugriff auf einen regulären Zeiger. Es verhindert ungenutzte Referenzen und sorgt für eine ordnungsgemäße Ressourcenverwaltung. Diese Funktionalität ist jetzt auch im Rahmen des C 11-Standards verfügbar.
Das obige ist der detaillierte Inhalt vonWas ist „enable_shared_from_this' und wie werden „shared_ptr'-Instanzen sicher erstellt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!