boost shared_from_this<>()
quelqu'un pourrait résumer en quelques succincte mots comment la stimuler shared_from_this<>()
pointeur intelligent devrait être utilisé, en particulier du point de vue de l'enregistrement des gestionnaires dans le io_service à l'aide de la fonction de liaison.
EDIT: Certaines réponses ont demandé plus de contexte. En gros, je suis à la recherche de "pièges", contre-intuitive, le comportement des gens ont observé à l'aide de ce mécanisme.
Qu'est-ce exactement ne comprenez-vous pas? Il est difficile de répondre à une pure question.
La seule façon que je pouvais essayer d'illustrer un exemple a été par le copier-coller des bouts de code, qui, étant de stimuler code, est assez dense comme il est.
La seule façon que je pouvais essayer d'illustrer un exemple a été par le copier-coller des bouts de code, qui, étant de stimuler code, est assez dense comme il est.
OriginalL'auteur Gearoid Murphy | 2010-09-02
Vous devez vous connecter pour publier un commentaire.
Le plus grand "gotcha" j'ai rencontré est que c'est illégal d'appeler shared_from_this à partir du constructeur. Cela résulte directement de la règle qu'un shared_ptr de l'objet doit exister avant de pouvoir appeler shared_from_this.
shared_ptr<Type> create
méthode.Je pense que vous vouliez dire, vous faites votre constructeur privé.
OriginalL'auteur Ben
À partir de ma compréhension, parfois, dans votre code, vous souhaitez une catégorie d'offrir
shared_ptr
'à lui-même ainsi que d'autres parties de votre code peut obtenir shared_ptr est un objet de votre classe après il a été construit.Le problème est que si votre classe a juste un
shared_ptr<>
à lui-même comme un membre de la variable, il ne sera jamais automatiquement détruits, car il y a toujours "une dernière référence" traîner à lui-même. Héritant deenable_shared_from_this
donne à votre classe une méthode automatique qui ne retourne pas uniquement unshared_ptr
, mais ne détient qu'une faible pointeur partagé comme une variable de membre afin de ne pas affecter le compte de référence. De cette façon, votre classe sera libéré comme d'habitude, lorsque la dernière référence est allé.Je n'ai jamais utilisé, mais c'est ma compréhension de la façon dont il fonctionne.
OriginalL'auteur Ken Simon
shared_from_this<>
est utilisé si un objet veut obtenir l'accès à unshared_ptr<>
pointe sur lui-même.Généralement un objet ne sait que sur l'implicite
this
pointeur, mais pas sur toutshared_ptr<>
gestion. Aussi,this
ne peut pas être facilement converti en unshared_ptr<>
qui partage la propriété avec d'autresshared_ptr<>
cas, donc il n'est pas facile pour un objet pour obtenir un valideshared_ptr<>
à lui-même.shared_from_this<>
peut être utilisé pour résoudre ce problème. Par exemple:OriginalL'auteur sth
la
boost::asio::io_service
destructeur documentation explique assez bienGénéralement vos objets de la chaîne d'opérations asynchrones où les gestionnaires sont liés à des fonctions de membre à l'aide de
boost::bind
etboost::shared_from_this()
. Il y a quelques exemples qui utilisent ce concept.OriginalL'auteur Sam Miller