Classe enable_shared_from_this
Consente di generare un shared_ptr
.
Sintassi
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();
};
Parametri
Ty
Tipo controllato dal puntatore condiviso.
Osservazioni:
Gli oggetti derivati da enable_shared_from_this
possono usare i metodi shared_from_this
nelle funzioni membro per creare proprietari shared_ptr dell'istanza che condividono la proprietà con proprietari shared_ptr
esistenti. In caso contrario, se si crea un nuovo shared_ptr
usando this
, è diverso dai proprietari shared_ptr
esistenti, il che può portare a riferimenti non validi o all'eliminazione di un oggetto più volte.
I costruttori, il distruttore e l'operatore di assegnazione sono protetti per evitare un uso improprio accidentale. Il tipo di argomento modello Ty deve essere il tipo della classe derivata.
Per un esempio di utilizzo, vedere enable_shared_from_this::shared_from_this.
shared_from_this
Genera un shared_ptr
che condivide la proprietà dell'istanza con i proprietari shared_ptr
esistenti.
shared_ptr<T> shared_from_this();
shared_ptr<const T> shared_from_this() const;
Osservazioni:
Quando si derivano oggetti dalla classe di base enable_shared_from_this
, le funzioni membro del modello shared_from_this
restituiscono un oggetto classe shared_ptr che condivide la proprietà di questa istanza con i proprietari shared_ptr
esistenti. In caso contrario, se si crea un nuovo shared_ptr
da this
, è diverso dai proprietari shared_ptr
esistenti, il che può portare a riferimenti non validi o all'eliminazione di un oggetto più volte. Il comportamento sarà indefinito se si chiama shared_from_this
in un'istanza che non è già di proprietà di un oggetto shared_ptr
.
Esempio
// 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;