Freigeben über


enable_shared_from_this-Klasse

Hilft bei der Erstellung von shared_ptr.

Syntax

class enable_shared_from_this {
public:
    shared_ptr<Ty>
        shared_from_this();
    shared_ptr<const Ty> shared_from_this() const;
    weak_ptr<T> weak_from_this() noexcept;
    weak_ptr<T const> weak_from_this() const noexcept;
protected:
    enable_shared_from_this();
    enable_shared_from_this(const enable_shared_from_this&);
    enable_shared_from_this& operator=(const enable_shared_from_this&);
    ~enable_shared_from_this();
};

Parameter

Ty
Der vom freigegebenen Zeiger gesteuerte Typ.

Hinweise

Aus enable_shared_from_this abgeleitete Objekte können mithilfe der shared_from_this-Methoden in Memberfunktionen shared_ptr-Besitzer der Instanz erstellen, die sich den Besitz mit vorhandenen shared_ptr-Besitzern teilen. Wenn Sie jedoch mithilfe von this einen neuen shared_ptr-Besitzer erstellen, unterscheidet dieser sich von vorhandenen shared_ptr-Besitzern. Dies kann zu ungültigen Verweisen oder dazu führen, dass das Objekt mehrmals gelöscht wird.

Die Konstruktoren, der Destruktor und der Zuweisungsoperator sind geschützt, um eine versehentliche falsche Verwendung zu verhindern. Der Vorlagenargumenttyp Ty muss der Typ der abgeleiteten Klasse sein.

Ein Beispiel für die Verwendung finden Sie unter enable_shared_from_this::shared_from_this.

shared_from_this

Generiert ein shared_ptr-Objekt, das sich den Besitz der Instanz mit vorhandenen shared_ptr-Besitzern teilt.

shared_ptr<T> shared_from_this();
shared_ptr<const T> shared_from_this() const;

Hinweise

Beim Ableiten von Objekten von der enable_shared_from_this-Basisklasse geben die shared_from_this-Vorlagenmemberfunktionen ein shared_ptr Class-Objekt zurück, das sich den Besitz dieser Instanz mit vorhandenen shared_ptr-Besitzern teilt. Wenn Sie jedoch aus this einen neuen shared_ptr-Besitzer erstellen, unterscheidet dieser sich von vorhandenen shared_ptr-Besitzern. Dies kann zu ungültigen Verweisen oder dazu führen, dass das Objekt mehrmals gelöscht wird. Dieses Verhalten ist bei einem Aufruf von shared_from_this für eine Instanz, die sich noch nicht im Besitz von einem shared_ptr-Objekt befindet, nicht definiert.

Beispiel

// std_memory_shared_from_this.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>

using namespace std;

struct base : public std::enable_shared_from_this<base>
{
    int val;
    shared_ptr<base> share_more()
    {
        return shared_from_this();
    }
};

int main()
{
    auto sp1 = make_shared<base>();
    auto sp2 = sp1->share_more();

    sp1->val = 3;
    cout << "sp2->val == " << sp2->val << endl;
    return 0;
}
sp2->val == 3

weak_from_this

weak_ptr<T> weak_from_this() noexcept;
weak_ptr<T const> weak_from_this() const noexcept;