enable_shared_from_this (Clase)
Ayuda a generar un shared_ptr
.
Sintaxis
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();
};
Parámetros
Ty
Tipo controlado por el puntero compartido.
Comentarios
Los objetos derivados de enable_shared_from_this
pueden usar los métodos shared_from_this
en las funciones miembro para crear propietarios shared_ptr de la instancia que comparte propiedad con propietarios shared_ptr
existentes. En caso contrario, si crea un nuevo shared_ptr
mediante this
, es distinto de los propietarios shared_ptr
existentes, lo que puede provocar referencias no válidas o que el objeto se elimine más de una vez.
Los constructores, el destructor y el operador de asignación están protegidos para evitar un uso incorrecto accidental. El tipo de argumento de plantilla Ty debe ser el tipo de la clase derivada.
Para obtener un ejemplo de uso, vea enable_shared_from_this::shared_from_this.
shared_from_this
Genera un shared_ptr
que comparte la propiedad de la instancia con propietarios shared_ptr
existentes.
shared_ptr<T> shared_from_this();
shared_ptr<const T> shared_from_this() const;
Comentarios
Al derivar objetos desde la clase base enable_shared_from_this
, las funciones miembro de plantilla shared_from_this
devuelven un objeto shared_ptr (Clase) que comparte la propiedad de esta instancia con propietarios shared_ptr
existentes. En caso contrario, si crea un nuevo shared_ptr
a partir de this
, es distinto de los propietarios shared_ptr
existentes, lo que puede provocar referencias no válidas o que el objeto se elimine más de una vez. El comportamiento es indefinido si se llama a shared_from_this
en una instancia que ya no pertenece a un objeto shared_ptr
.
Ejemplo
// 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;