Maison  >  Article  >  développement back-end  >  Quand les destructeurs sont-ils appelés pour les variables statiques globales et de classe en C ?

Quand les destructeurs sont-ils appelés pour les variables statiques globales et de classe en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-07 14:39:03331parcourir

When are Destructors Called for Global and Class Static Variables in C  ?

Invocation de destructeur pour les variables statiques globales et de classe en C

En C, les objets sont généralement alloués dans la mémoire de la pile (pour les variables locales) et mémoire tas (pour les variables allouées dynamiquement). Cependant, les variables globales et les variables statiques de classe sont allouées dans la section données du programme, ce qui soulève la question : Quand leurs destructeurs sont-ils appelés ?

Selon la norme C 03 (§ 3.6.3), les destructeurs pour les objets initialisés avec une durée de stockage statique sont invoqués au retour de la fonction principale et lorsque la fonction de sortie est appelée. Ces objets sont détruits dans l'ordre inverse de leur achèvement par constructeur ou de leur achèvement d'initialisation dynamique.

De plus, pour les données membres de classe statiques (§ 9.4.2 7), leur comportement d'initialisation et de destruction est analogue à celui des objets non- objets locaux.

Cependant, si un destructeur n'a aucun comportement observable (c'est-à-dire qu'il n'effectue aucun effet secondaire), il ne peut pas être invoqué. En effet, le compilateur peut optimiser le code pour éviter d'appeler des destructeurs inutiles, comme décrit dans la réponse de Terry Mahaffey à « Un destructeur C est-il garanti de ne pas être appelé avant la fin du bloc ? ».

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn