J'ai écrit un programme, qui était tout dans un fichier, et les méthodes ont été déclarées dans un en-tête. Le programme a initialement fonctionné parfaitement lorsqu'il était dans un fichier. Mais quand j'ai séparé le programme, j'ai continué à obtenir des occurrences aléatoires pour le destructeur de l'une des classes qui a été déclaré dans le fichier d'en-tête.Variables statiques, compilation séparée
J'ai une variable statique dans mon en-tête pour compter le nombre d'objets d'une classe particulière. Chaque fois que je construis l'objet, j'incrémente cette variable. Ensuite, dans mon destructeur, je soustrais 1 à cette variable, vérifie si c'est 0 (ce qui signifie que c'est le dernier objet) et fais quelque chose. La valeur semble parfois éteinte, je ne sais pas pourquoi. J'ai des appels aléatoires dans ma demande mais je ne vois pas pourquoi cela affecterait ce que j'ai décrit ci-dessus, merci. Toute aide ou compréhension est appréciée!
[Mise à jour]: avoir une classe de base, qui contient le destructeur .. qui est implémenté dans l'en-tête, puis j'ai deux classes dérivées, qui dans leur constructeur incrémentent la variable statique .. alors que puis-je faire?
Ce que je suis en train de faire est la suivante: Dans mon tête, j'ai ceci:
class A {
public:
virtual ~A() {
count --;
if (count == 0) { /* this is the last one, do something */ }
}
class B : public A {
public:
B();
}
Puis, en classe BI ont
B::B() {
count++;
}
Où puis-je définir compter donc je ne suis pas obtenir des chiffres trompeurs? Merci.
La raison pour laquelle il ne correspond pas est parfois parce que le compilateur génère automatiquement le constructeur de copie pour vous. Le constructeur de copie par défaut n'incrémentera pas la variable count. –