Ordre d'appell des destructeurs

Ordre d'appell des destructeurs

by Philippe Andreas Gigon -
Number of replies: 2

Bonjour,

Je me demande ce que se passe lorsque on a le main suivant:

int main(){

nomdeclasseA a;

nomdeclasseB b;

return 0;}

c'est clair que par linéarité du déroulement on appell d'abord le constructeur de A et ensuite le constructeur de B, mais je ne vois pas dans quel ordre les objets sont detruits? Est-ce que ceci dépend du compilateur ou on détruit toujours d'abord b et ensuite a? Pour quelle raison la déstruction se fait dans cet ordre?

Merci d'avance

Philippe Gigon

In reply to Philippe Andreas Gigon

Re: Ordre d'appell des destructeurs

by Jean-Cédric Chappelier -

comme dit en cours (ce n'est pas un reproche, juste une référence pour ceux qui veulent revoir) : l'ordre d'appel des destructeurs est TOUJOURS exactement l'inverse de l'ordre d'appel des constructeurs.

La raison technique :

  1. comme ça on est sûr de ce qui se passe vraiment ;
  2. c'est assez « logique » avec l'utilisation : si, dans votre exemple, b utilise quelque chose de a, il faut que a « vive » plus longtemps que b ;
  3. en fait, c'est parce que c'est géré par une pile (comme vue en cours/exercice) : on dépile lors de l'appel des destructeurs.
In reply to Jean-Cédric Chappelier

Re: Ordre d'appell des destructeurs

by Philippe Andreas Gigon -

Merci pour votre réponse explicative, j'étais pas sûr si cette règle s'applique aussi dans ce cas là ou seulement dans le cadre de l'héritage multiple, c'est plus clair maintenant.