enable_shared_from_this, classe

Aide à générer un shared_ptr.

Syntaxe

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();
};

Paramètres

Ty
Type contrôlé par le pointeur partagé.

Notes

Les objets dérivés de enable_shared_from_this peuvent utiliser les méthodes shared_from_this dans des fonctions membres pour créer les propriétaires shared_ptr de l’instance qui partagent la propriété avec les propriétaires shared_ptr existants. Sinon, si vous créez un nouveau shared_ptr à l’aide de this, il est différent des propriétaires shared_ptr existants, ce qui peut entraîner des références non valides ou la suppression de l’objet plusieurs fois.

Les constructeurs, le destructeur et l’opérateur d’assignation sont protégés pour éviter toute mauvaise utilisation accidentelle. Le type d’argument de modèle Ty doit être le type de la classe dérivée.

Pour obtenir un exemple d’utilisation, consultez enable_shared_from_this::shared_from_this.

shared_from_this

Génère un shared_ptr qui partage la propriété de l’instance avec les propriétaires shared_ptr existants.

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

Notes

Quand vous dérivez des objets à partir de la classe de base enable_shared_from_this, les fonctions membres de modèle shared_from_this retournent une classe shared_ptr qui partage la propriété de cette instance avec les propriétaires shared_ptr existants. Sinon, si vous créez un nouveau shared_ptr à partir de this, il est différent des propriétaires shared_ptr existants, ce qui peut entraîner des références non valides ou la suppression de l’objet plusieurs fois. Le comportement est indéfini si vous appelez shared_from_this sur une instance qui n’est pas déjà détenue par un objet shared_ptr.

Exemple

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