Je fais un usage intensif de boost:shared_ptr
dans mon code. En fait, la plupart des objets qui sont alloués sur le tas sont détenus par un objet shared_ptr
. Malheureusement, cela signifie que je ne peux pas passer this
dans toute fonction qui prend un shared_ptr
. Considérez ce code :
void bar(boost::shared_ptr<Foo> pFoo)
{
...
}
void Foo::someFunction()
{
bar(this);
}
Il y a deux problèmes ici. D'abord, cela ne compilera pas parce que le constructeur T* de shared_ptr
est explicite. Deuxièmement, si je le force à construire avec bar(boost::shared_ptr<Foo>(this))
J'aurai créé un deuxième pointeur partagé vers mon objet, ce qui conduira éventuellement à une double-suppression.
Cela m'amène à ma question : Existe-t-il un modèle standard pour obtenir une copie du pointeur partagé existant dont vous connaissez l'existence à l'intérieur d'une méthode sur un de ces objets ? Est-ce que l'utilisation d'un comptage de référence intrusif est ma seule option ici ?