C ++ appelle automatiquement des destructeurs de toutes les variables locales dans le bloc dans l'ordre inverse, que le bloc soit sorti normalement (le contrôle des chutes) ou une exception est lancée. P>
ressemble au terme la pile de pile em> ne s'applique qu'à celle-ci. Comment s'appelle l'ancien processus (sortie normale du bloc) concernant la destruction de variables locales? P>
6 Réponses :
La variable locale est détruite quand elle est hors de portée. Peut-être que le processus s'appelle comme "hors de portée"? P>
Je ne suis pas sûr qu'il y ait un nom pour cela. Les variables de pile sont SO EM> AUTOMATIQUE que personne ne s'inquiète d'eux, jamais, pas encore suffisamment pour donner un nom pour ce processus de nettoyage automatique. P>
appelez-le "sortir de la portée", je suppose. p>
Un objet est automatiquement détruit lorsqu'il "dépasse de la portée". Cela pourrait être appelé «récupération de stockage automatique», mais qui fait référence à la collecte des ordures (il existe plusieurs papiers avec cette phrase dans leur nom qui utilise le terme pour signifier la collecte des ordures). Lorsqu'il est utilisé pour assurer un appariement correct d'ouverture / fermeture, de verrouillage / de déverrouillage ou d'autres formes d'acquisition de ressources avec leur libération appropriée, il est connu sous le nom de modèle de conception de L'acquisition de ressources est l'initialisation (RAII) , qui est un peu ironique étant donné que l'aspect principal de Raii n'est pas l'initialisation ou l'acquisition des ressources, mais plutôt sa destruction. < / p>
J'ai toujours entendu parler de "sortir de la portée" ou plus précisément "un auto code> variable hors de portée". P>
Si ce que vous demandez, c'est la manière dont l'appel de la méthode est réellement implémenté dans le code de la machine, je dirais que cela dépendrait de la convention appelante utilisée p>
La pile de pile se produit dans ces deux cas, il s'agit simplement d'une exécution normale, la pile n'est déroulante que dans le contexte de la méthode d'appel (ou du bloc) lorsque la méthode d'exécution retourne (ou le bloc est sorti). Les variables locales sont allouées sur la pile, elles sont donc nettoyées dans l'ordre inverse de l'allocation, et c'est ce processus appelé déroulement. Ce n'est pas différent de traiter tout autre type de données que vous stockiez dans une structure LIFO - E.G. Annuler, Refaire. P>
Lorsqu'une exception est levée, le gestionnaire déroulera la pile à travers zéro ou plus de méthodes jusqu'à ce qu'elle trouve une personne qui peut attraper l'exception, ou jusqu'à ce qu'il atteigne le haut de la pile, à quel point le gestionnaire d'exception non géré sera appelé. . P>
Il semble que ce soit une convention pour n'utiliser que le terme pile de pile dans le cas de la manipulation des exceptions, mais c'est le même processus dans chacun de ces cas. Le cas spécifique où la pile se déroule en raison d'une méthode de sortie de méthode est appelée retour, il ne semble pas y avoir de convention pour nommer ce qui se passe lorsqu'un bloc de code scopé est sorti. p>
Ce n'est vraiment rien appelé. Partout dans la norme, il dit des choses comme "... Les variables automatiques sont détruites à la fin du bloc". Il ne donne jamais ce processus un nom.
@Gman - Sauvez les licornes: je suppose que vous pourriez ajouter cela comme une réponse. Mentionnant ce que la norme dit est un argument fort.