compteur d'instance et allocation statique
bonjour,
aujourd'hui, problèmes de comptage.
donc, j'ai un vector dans lequel je stocke des instances d'une classe, instances créées, sauf erreur, en statique avec :
Code:
1 2 3 4 5 6 7
|
// dans le .h
std::vector <Food> Foods;
Food food;
//et qq part dans le .cpp
Food food(x,y);
Foods.push_back(food); |
jusque ici, tout marche, ça compile et ça s'exécute comme prévus.
Je désire maintenant connaitre le nombre d'instance de la classe Food en mémoire et la place que cela prend.
j'ai donc ajouté à ma classe et au constructeur:
Code:
1 2 3 4 5
| static int nbFood;
static int nbMemory;
// et
nbFood ++;
memory += sizeof(Food); |
Jusque ici, tout vas bien, j'en ajoute un, cela comptabilise.
Cela se gatte lorsque je supprime un food que je voudrais du coup comptabiliser en moins dans nFood.
Code:
1 2
| nbFood --;
memory -= sizeof(Food); |
dans le destructeur m'affiche n'importe quoi, vus fort logiquement comme j'ai pu le lire, que le destructeur est appelé de façon implicite dès que le programme quitte la portée dans lequel l'objet existe, ce qui est visiblement régulièrement le cas avec des appels du type à de multiples endroits de mon programme.
Je ne voudrais pas avoir à passez par l'allocation dynamique et les pointeurs, apparemment des vectors de pointeurs étant une quasi hérésie :) (surtout que je risque fort de ne pas maitriser la chose et de finir avec au mieux du code qui ne compile plus)...
Mais j'aimerais bien tout de même pouvoir suivre le nombre de Food crées et la place occupée...
Deux questions donc :
1 - puis je considérer qu'apres
le dernier food stocké et retiré de Foods n'existe plus nul part et est bien effacé de la mémoire ?
2 - Y a t'il une combine pour faire le petit comptage tant espéré sans passer par l'allocation dynamique ?
ca compte, mais ca marche plus :(
Bonjour,
Donc, tétu, même si l'on me dit que la que la destruction est déterministe, je veux tout de même savoir combien j'ai de food :P
Avec
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| Food()
{
++nbFood;
}
Food(Food const&)
{
++nbFood;
}
~Food()
{
--nbFood;
} |
Cela fonctionne nickel, je sais maintenant combien j'ai de food a tout moment.
Sauf, que mes food ne s'initialisent plus correctement, visiblement ...
A l'initialisation d'un food, je fait :
Code:
1 2 3 4 5 6 7 8
| Food f;
f.init(rand()%100,rand()%100);
Foods.push_back(f);
// puis, plus loin des appels à Food du style
f.affiche();
// avec dans Food :
void Food::init(int a,int b){x = a;y = b;}
void Food::affiche(){std::cout<<"pos x - y :"<< x <<" - "<< y<<std::endl;} |
avant de definir Food(Food const&) , cela marchais, maintenant, les x et y des foods sont à 0 ... :calim2:
peut être bien que je vais essayer de ne pas m'obstiner et arrêter de compter... mais j'aimerais bien quand même compter ...