Les instructions « goto » peuvent-elles franchir les limites des fonctions sans appeler de destructeurs ?
Il est communément admis que les sauts goto contournent l'exécution ordonnée du code. , y compris la destruction d'objets. Cependant, il s'agit d'une idée fausse qui découle d'une mauvaise compréhension des règles de portée de C.
Portée des étiquettes
Premièrement, les sauts goto sont confinés dans la portée de leur fonctions respectives. Sauter au-delà des limites des fonctions, comme dans l'exemple que vous avez fourni, n'est pas possible. Le compilateur émettra une erreur indiquant que l'étiquette n'est pas définie dans la fonction d'où provient le saut.
Initialisation et portée de l'objet
Deuxièmement, les sauts goto ne peuvent pas traverser le initialisation des objets. Si un saut est effectué au-delà du point où un objet est déclaré et initialisé, la portée de l'objet est saisie et son constructeur est appelé. Cependant, si le saut est effectué de nouveau dans la portée d'un objet déjà initialisé, son destructeur est invoqué avant l'exécution du saut.
Préservation de la portée de l'objet
Enfin, les objets avec une durée de stockage automatique (c'est-à-dire les variables déclarées dans les blocs) ne sont pas divulgués par les sauts goto. Quitter la portée d'un objet via un goto déclenche sa destruction, garantissant que la gestion des ressources est gérée correctement.
Conclusion
Contrairement à la croyance populaire, les instructions goto en C ne permettent pas pour les sauts incontrôlés qui violent les règles de portée ou entraînent des fuites de mémoire. Si l’utilisation de goto reste discutable pour des raisons de conception, elle ne présente pas les risques inhérents qu’on lui prête souvent.
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!