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)
Questions connexes
- 1. renvoyant un 'pointeur' qui doit être tenu par un pointeur intelligent
- 2. Y a-t-il une classe de pointeur intelligent boost qui peut être configurée pour ne pas être détruite lors de la destruction?
- 3. Y a-t-il un foncteur qui déréfine un pointeur (intelligent), le met en surbrillance, puis appelle une méthode dessus?
- 4. Y at-il un moyen de créer un itérateur Linq XElement qui est mis à jour lorsque l'arbre est modifié?
- 5. Ce qui a changé exactement lorsque QStandardItemModel itemChanged est signalé
- 6. Exclusion d'une variable lorsque sa valeur est vide
- 7. Quand cette variable membre VB6 est-elle détruite?
- 8. Quelle est la manière correcte de déclarer un pointeur sur un pointeur __far?
- 9. Bash == opérateur dans [[]] est trop intelligent!
- 10. Pointeur vers un pointeur dans l'objectif-c?
- 11. Passer un pointeur intelligent en tant qu'argument dans une classe: scoped_ptr ou shared_ptr?
- 12. Problèmes lors de l'écriture d'un constructeur de copie pour un pointeur intelligent
- 13. Comment vérifier si un pointeur est valide?
- 14. En C++, puis-je définir un pointeur vers un membre d'une classe privée en dehors de sa portée?
- 15. Comment démarrer automatiquement mon application lorsque ma configuration est terminée dans le projet de configuration C#
- 16. Excel nommé gamme de résolution à sa cible réelle
- 17. Est-ce que changer un pointeur est considéré comme une action atomique dans C?
- 18. Quelle est la meilleure signature pour clone() en C++?
- 19. Comment faire ce casting intelligent en C?
- 20. pointeur pointeur C++ Méthodes
- 21. Comment projeter un pointeur en C++
- 22. doutes en chambre double pointeur en C
- 23. Comment mettre fin à un processus démarré à partir d'une tâche Ant si le script est annulé?
- 24. Est-ce une utilisation valide d'un pointeur Objective-C?
- 25. Est-il intelligent de toujours rediriger vers https?
- 26. C: Quelle est la meilleure façon de modifier un pointeur int passé via un typedef?
- 27. Si j'ai un pointeur vide, comment y mettre un int?
- 28. Lorsque vous tapez $ (dans visual studio pour jquery ... il est automatiquement converti en $ addHandler (
- 29. Conversion d'un pointeur en tableau en C++
- 30. Ferme un autre processus lorsque l'application est en cours de fermeture
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. –