Partilhar via


Classe enable_shared_from_this

Ajuda a gerar um shared_ptr.

Sintaxe

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
O tipo controlado pelo ponteiro compartilhado.

Comentários

Os objetos derivados de enable_shared_from_this podem usar os métodos shared_from_this nas funções de membro para criar proprietários de instância shared_ptr que compartilham a propriedade com proprietários shared_ptr existentes. Caso contrário, se você criar um novo shared_ptr usando this, ele será diferente dos proprietários shared_ptr existentes, o que poderá levar a referências inválidas ou fazer com que o objeto seja excluído mais de uma vez.

Os construtores, o destruidor e o operador de atribuição são protegidos para evitar o uso indevido acidental. O tipo de argumento de modelo Ty precisa ser do tipo da classe derivada.

Para obter um exemplo de uso, consulte enable_shared_from_this::shared_from_this.

shared_from_this

Gera um shared_ptr que compartilha a propriedade da instância com proprietários shared_ptr existentes.

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

Comentários

Quando você deriva objetos da classe base enable_shared_from_this, as funções de membro de modelo shared_from_this retornam um objeto de Classe shared_ptr que compartilha a propriedade dessa instância com os proprietários shared_ptr existentes. Caso contrário, se você criar um novo shared_ptr de this, ele será diferente dos proprietários shared_ptr existentes, o que poderá levar a referências inválidas ou fazer com que o objeto seja excluído mais de uma vez. O comportamento será indefinido se você chamar shared_from_this em uma instância que já não pertence a um objeto shared_ptr.

Exemplo

// 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;