J'ai trouvé QPointer. Y en a-t-il d'autres?Y at-il un pointeur intelligent qui est automatiquement annulé lorsque sa cible est détruite en C++?
Q
Y at-il un pointeur intelligent qui est automatiquement annulé lorsque sa cible est détruite en C++?
4
A
Répondre
8
Boost - le weak_ptr
a quelques fonctionnalités intéressantes qui le rendent sûr à utiliser, si vous utilisez également shared_ptr
. Vous conservez une référence weak_ptr
à une instance gérée par shared_ptr
durée de vie. Lorsque vous devez utiliser l'instance sous-jacente, convertissez-la en instance shared_ptr
à l'aide du constructeur de la classe shared_ptr
ou de la méthode lock
. L'opération échouera si l'instance sous-jacente a été supprimée. L'utilisation est thread-safe de la même manière que la classe shared_ptr
:
shared_ptr<int> p(new int(5));
weak_ptr<int> q(p);
// some time later
if(shared_ptr<int> r = q.lock())
{
// use *r
}
6
« boost :: weak_ptr » fonctionne très bien avec « boost :: shared_ptr » (également disponible en TR1)
Merci. Je n'étais pas au courant que weak_ptr avait ce comportement. Je me demande combien je paie pour le comportement de comptage des références inutiles. Quoi qu'il en soit, votre réponse a été la première, je pense. Marquage comme meilleur. –