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 wie werden „shared_ptr'-Instanzen sicher erstellt?

Linda Hamilton
Freigeben: 2024-12-17 04:36:25
Original
455 Leute haben es durchsucht

What is `enable_shared_from_this` and how does it safely create `shared_ptr` instances?

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
}
Nach dem Login kopieren

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);
    }
};
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage