Pourquoi le destructeur de la classe enfant est-il appelé avant celui du parent ?
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 ?
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 Vehicle
propriété dans une Car
mé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.