Bonjour. Je suis tombé sur un truc louche et j'aimerais votre avis dessus.
Dans un code que j'observe, j'ai une classe qui a (entre autres) une variable d'instance qui est un void*
Dans le constructeur de MaClasse, maVariable est initialisée en construisant une instance d'une autre classe bien determinée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 classe MaClasse { /*...*/ void* maVariable; /*...*/ }
Dans chacune des fonctions ou maVariable est utilisee, elle est castée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 MaClasse::MaClasse() { /*...*/ maVariable = new UneClasseBienDeterminee(); /*...*/ }
SAUF lors de la destruction (ce qui m'inquiete)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 MaClasse::uneFonctionQuelconque { /*...*/ ((UneClasseBienDeterminee*)maVariable)->uneFonctionDeLaClasseBienDeterminee(); /*...*/ }
Ma question est: tout ceci est-il bien normal? La "ClasseBienDeterminee" est dans une librarie dont je ne possède pas de version compilée et mode debug. Je ne peux donc pas "stepper" dedans, et je n'ai pas vraiment moyen de savoir si son destructeur est bien appellé ou non.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 MaClasse::~MaClasse() { /*...*/ delete maVariable; maVariable=NULL; /*...*/ }
Il ne semble pas y avoir d'erreur au run-time, mais comme la destruction se fait au moment de quitter le programme, je pense que même si le destructeur n'est pas appellé je ne m'en apercevrait pas.
Merci de vos avis
Partager