La plus simple façon de compter les occurrences d'un objet

Je voudrais savoir le nombre exact d'occurrences de certains objets alloués à certain moment de l'exécution. Surtout pour la chasse possible les fuites de mémoire(j'utilise principalement la RAII, presque pas de nouvelles, mais encore j'aurais pu oublier .clear() sur le vecteur avant d'ajouter de nouveaux éléments ou quelque chose de similaire). L'Ofc je pourrais avoir un

atomic<int> cntMyObject;

que j' -- dans le destructeur, ++ augmentation du constructeur, cpy constructeur(j'espère que j'ai recouvert le tout :)).
Mais c'est coder en dur pour chaque classe. Et il n'est pas simple de faire le désactiver en mode "Release".
Donc, il y a toute simple élégant qui peut être facilement désactivé pour compter les instances d'objet?

  • Pourquoi ne pas utiliser un profil pour trouver des fuites de mémoire?...
  • Pas l'opérateur d'affectation, il ne faut pas modifier le nombre d'objets existants du type, juste modifie la valeur de l'un d'eux.
  • Autant que je trouve l'idée de l'ajout d'un objet global contre intéressant, je dirais que pour la pratique de votre problème de l'élimination des erreurs de mémoire, l'exécution de votre programme par Valgrind serait beaucoup plus facile d'approche de la solution, avec plus de messages significatifs, trop.
  • Si vous pensez que quelque chose comme google HEAPProfiler-c'est sympa, mais une fois que j'ai foiré STL trucs(non thread-safe mises à jour)et il n'a pas de détecter les fuites(ça m'a aidé à les trouver car j'ai remarqué que les cercles sont de plus pour le rechargement de la même chose). Aussi, je ne sais pas comment mettre l'accent sur certains de la classe dans HeapProfiler, je ne connais que de générer de "l'ensemble du programme mem utilisation".
  • Êtes-vous prêt à accepter compilateur solutions spécifiques? Je peux offrir une non intrusif gcc un et il y a une fonction similaire pour msvc trop.
  • Oui, Im en utilisant gcc g++), ofc, je préfère toujours "dans la norme" solutions
  • À l'aide du générateur de profils n'est pas la réponse ici. Que le demandeur a mentionné oublier un vecteur.clear() sera toujours un problème. Sinon il n'y aurait pas de fuites de mémoire dans les programmes Java. C'est pas le type en C++ les fuites, mais c'est un problème important et il a besoin d'un total de différents outils pour le résoudre alors valgrind etc.

InformationsquelleAutor NoSenseEtAl | 2011-08-17