Bonjour à tous,
J’ai un code qui plante au moment où le destructeur de l’objet est appelé. Je dois dire que je n’ai jamais trop eu à faire attention à l’écriture de mes destructeurs jusqu’à présent, les destructeurs de c(ainsi que les constructeurs de copie d’ailleurs) par défaut ayant toujours suffit, alors c'est peut-être le moment où jamais.
En ce moment je travaille sur une architecture assez complexe où des classes sont dérivées dans tous les sens et contienent souvent des pointeurs sur d’autres lasses. Je me suis aperçu que les constructeurs de copie avaient à être repris (pour bien prendre en compte ce qui se passait au moment de la copie des pointeurs membres de ma classe principale).
Au niveau du destructeur qui me pose un problème, ce que je vois avec le débogueur au moment où le destructeur de ma classe principale est appelé, qu’il passe dans un autre destructeur au préalable, ce dernier effectuant un delete de pointeurs.
En déboguant step à step, je m’aperçois qu’à un moment, le destructeur qui est appelé en intermédiaire, cherche à deleter une variable (un pointeur) qui est déjà devenue le pointeur NULL. Je ne vois pas pour l’instant à quel moment il a pu devenir nul et pourquoi !
D’ailleurs je comprends même pas clairement pourquoi le destructeur intermédiaire est appelé !
Alors ma question sera : c’est quoi la vraie règle pour ne pas se planter quand on écrit ses destructeurs (notamment quand il y a des pointeurs dans les classes) et c’est quoi la règle d’appel qui s’exécute au moment de la destruction quand on travaille sur des classes qui héritent d’autres?
Salut, merci.
Partager