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;