Compartir vía


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;