Lorsqu'un objet est créé dans votre fonction main(), son destructeur est-il appelé à la fin du programme? Je suppose que oui puisque main() a toujours une portée (le programme entier), mais je voulais juste m'en assurer.Destructeurs appelés à la fin d'un programme
3
A
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.
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
- 1. Sortez d'un pâté de maisons: les destructeurs sont-ils appelés?
- 2. Multi-Threading - Stratégie de nettoyage à la fin du programme
- 3. Lorsque je tue un pThread en C++, les destructeurs d'objets sur les piles sont-ils appelés?
- 4. Lorsqu'une fenêtre se ferme, est-ce que mes destructeurs sont appelés?
- 5. Erreur LoaderLock à la fin du programme
- 6. Dans quelles circonstances les destructeurs C++ ne vont-ils pas être appelés?
- 7. Quel est l'ordre dans lequel les destructeurs et les constructeurs sont appelés en C++?
- 8. Quel est le mécanisme par lequel les destructeurs sont appelés pour les objets affectés par la pile?
- 9. open() provoque la fin du programme
- 10. Dois-je utiliser glDeleteTextures() à la fin du programme?
- 11. erreur de segmentation à la fin du programme
- 12. delete derby tables à la fin du programme
- 13. Destructeurs en C++
- 14. Question sur les destructeurs C++
- 15. Erreur de fin à la fin du programme après avoir exécuté tout?
- 16. Destructeurs de lancer, corruption de mémoire?
- 17. Boutons radio HTML appelés boutons à bascule
- 18. en utilisant des destructeurs Qt
- 19. Comment mettre fin à une application par programme sous Android?
- 20. Exécuter et mettre fin à un programme (Python sous Windows)
- 21. Ne jamais mettre fin à programme c lié cpu
- 22. événement ne sont pas appelés à richfaces
- 23. La difficulté de concevoir un programme d'analyse FIN
- 24. Erreur de syntaxe au-delà de la fin du programme
- 25. Comment attendre la fin du programme de désinstallation?
- 26. premier mot à la fin
- 27. couper la chaîne à la fin de la chaîne
- 28. Les destructeurs ne sont-ils pas destinés à être appelés lors du renvoi de cet objet (pas en tant que pointeur)?
- 29. Gestion des destructeurs d'objets gérés (C#) et non gérés (C++)
- 30. Destructeurs de types builtin (int, char, etc ..)
C'est vrai pour l'utilisation de la sortie dans n'importe quelle fonction, n'est-ce pas? –
@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. –
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. –