Pourquoi le destructeur de la classe enfant est-il appelé avant celui du parent ?


scottxiao

en C++, lorsque le destructeur de l'objet est appelé, il invoque d'abord le destructeur de la classe enfant, puis celui du parent, ce qui est l'opposé de la procédure de construction. Mais pourquoi? Cela semble être une question simple, mais je n'ai pas trouvé de réponse satisfaisante sur Internet. Quelqu'un pourrait-il expliquer la nécessité de faire de la destruction dans un tel ordre ?

6502

En supposant que vous parliez de parent/enfant signifiant héritage, considérez que

 struct Car : Vehicle { ... };

n'est pas vraiment différent de

 struct Car { Vehicle _base; ... };

sauf que automatiquement lorsque vous faites référence à une Vehiclepropriété dans une Carméthode _base.est implicitement ajouté par le compilateur.

La norme appelle même cela le "sous-objet de la classe de base"... c'est un objet qui n'a pas de nom et que vous utilisez implicitement, mais il est toujours là.

Désormais, en C++, les membres d'une classe sont construits avant la classe elle-même et détruits après. Il en va de même pour le "sous-objet de classe de base" implicite. Ainsi, lors de la construction d'une voiture, vous devez d'abord construire le véhicule... et après avoir détruit la voiture, tous les membres individuels sont détruits, y compris le véhicule.

Articles connexes


Le destructeur de la classe enfant n'est pas appelé

Alexandre Je travaille actuellement sur un jeu en tant que projet pour mon université. Il est réalisé en C++ avec SDL2. J'ai un vecteur qui contient des pointeurs de la classe Enemies, qui est une classe parente abstraite de la Plantclasse. Dans le constructeu