2009-12-25 5 views

Répondre

15

Cela dépend de la façon dont votre programme se termine. Si elle se termine par le retour principal (soit par un retour explicite, soit par la fin), alors oui, tous les objets automatiques dans main seront détruits. Mais si votre programme se termine en appelant exit(), alors le main ne sortira pas de la portée et les objets automatiques ne seront pas détruits.

+1

C'est vrai pour l'utilisation de la sortie dans n'importe quelle fonction, n'est-ce pas? –

+1

@Benoit - oui, l'appel de la sortie ne déroule pas la pile. Si vous appelez exit, aucune variable automatique en attente dans une fonction ne sera détruite. –

+0

Oui. Si le programme se termine gracieusement, les destructeurs sont appelés à nettoyer. Cela peut facilement être observé soit en attachant un débogueur ou en mettant un printf dans le destructeur. –

3

La portée des déclarations à l'intérieur de main() n'est pas l'ensemble du programme. Il se comporte comme n'importe quelle fonction normale. Donc, oui, les destructeurs d'objets de classe locale s'exécutent comme prévu. Sauf si le programme se termine anormalement.

Questions connexes