9
votes

Comment détruire les variables locales lorsqu'un bloc est excité normalement appelé en C ++?

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.

ressemble au terme la pile de pile ne s'applique qu'à celle-ci. Comment s'appelle l'ancien processus (sortie normale du bloc) concernant la destruction de variables locales?


2 commentaires

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.


6 Réponses :


2
votes

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"?


0 commentaires

1
votes

Je ne suis pas sûr qu'il y ait un nom pour cela. Les variables de pile sont SO AUTOMATIQUE que personne ne s'inquiète d'eux, jamais, pas encore suffisamment pour donner un nom pour ce processus de nettoyage automatique.

appelez-le "sortir de la portée", je suppose.


0 commentaires

5
votes

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>


0 commentaires

1
votes

J'ai toujours entendu parler de "sortir de la portée" ou plus précisément "un auto variable hors de portée".


0 commentaires

1
votes

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


0 commentaires

3
votes

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.

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é. .

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.


0 commentaires