Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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;