Maison > développement back-end > C++ > Est-ce que `goto` ignore les appels de destructeur en C ?

Est-ce que `goto` ignore les appels de destructeur en C ?

Barbara Streisand
Libérer: 2024-11-26 12:24:08
original
431 Les gens l'ont consulté

Does `goto` Skip Destructor Calls in C  ?

Goto peut-il sauter à travers le code sans invoquer de destructeurs ?

Question : Est-il vrai que les sauts goto peuvent contourner le code sections sans exécuter destructeurs ?

Exemple : Considérez le code suivant :

void f() {
   int x = 0;
   goto lol;
}

int main() {
   f();
lol:
   return 0;
}
Copier après la connexion

L'objet x sera-t-il supprimé après le saut goto ?

Réponse :

Non, l'objet x ne sera pas fuite.

Cette croyance est une idée fausse courante. Les sauts goto ne contournent pas les mécanismes de portée de C et les destructeurs sont appelés comme prévu.

1. Portée de l'étiquette :

Les instructions Goto ne peuvent pas franchir les limites des fonctions. La portée d'une étiquette est limitée à la fonction dans laquelle elle est définie.

2. Initialisation de l'objet :

Les sauts Goto ne peuvent pas contourner l'initialisation de l'objet. Tenter de dépasser un objet non initialisé entraînera une erreur du compilateur. De même, revenir en arrière sur un objet initialisé entraînera la destruction de son instance précédente.

3. Portée des objets :

Les objets avec une durée de stockage automatique ne sont pas divulgués lorsqu'un saut goto quitte leur portée. C s'assure que les objets sont détruits dans l'ordre inverse de leur construction à la sortie d'une portée.

Conclusion :

Les sauts Goto respectent pleinement les règles de portée et de destruction de C . Il n'est pas possible d'utiliser goto pour contourner ces mécanismes et provoquer des fuites mémoire. Cependant, il n'est toujours pas recommandé d'utiliser goto de manière excessive car cela peut conduire à un code difficile à comprendre et à maintenir.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal