Comment est la destruction des variables locales lorsqu'un bloc est terminé normalement appelé en C ++?

StackOverflow https://stackoverflow.com/questions/2605352

  •  25-09-2019
  •  | 
  •  

Question

C ++ appelle automagiquement de toutes les variables Destructeurs locales dans le bloc dans l'ordre inverse, que le bloc soit terminé normalement (contrôle tombe à travers) ou une exception est levée.

On dirait que le terme déroulant empilez applique uniquement à ce dernier. Comment l'ancien processus (la sortie normale du bloc) appelé en ce qui concerne en train de détruire les variables locales?

Était-ce utile?

La solution

Un objet est automatiquement détruit quand il « est hors de portée ». Cela pourrait être appelée « récupération de stockage automatique », mais qui fait référence à la collecte des ordures (il y a plusieurs papiers avec cette phrase en leur nom qui utilisent le terme pour signifier la collecte des ordures). Quand il est utilisé pour assurer une bonne paire de ouverture / fermeture, verrouillage / déverrouillage, ou d'autres formes d'acquisition des ressources avec leur libération appropriée, il est connu comme le modèle de conception de Resource acquisition est initialisation (RAII) , ce qui est quelque peu ironique étant donné que l'aspect principal de RAII est pas l'initialisation des ressources ou de l'acquisition, mais plutôt sa destruction.

Autres conseils

déroulage Stack se produit dans ces deux cas, il est juste que dans l'exécution normale de la pile est dénoué que dans le contexte de la méthode d'appel (ou bloc) lorsque la méthode retourne d'exécution (ou le bloc soit terminé). Les variables locales sont allouées sur la pile, de sorte qu'ils sont nettoyés dans l'ordre inverse de l'allocation, et il est ce processus qui est appelé déroulement. Il est pas différent que de traiter tout autre type de données que vous souhaitez stocker dans une structure LIFO - par exemple défaire, refaire.

Si une exception est levée le gestionnaire va se détendre l'empilement à travers par zéro ou plusieurs méthodes jusqu'à ce qu'il trouve celui qui peut intercepter l'exception, ou jusqu'à ce qu'il atteigne le sommet de la pile, après quoi le manipulateur d'exception non gérée sera appelée .

Il semble convention d'utiliser uniquement la pile terme de déroulement dans le cas de la gestion des exceptions, mais il est le même processus se produisant dans chacun de ces cas. Le cas particulier où la pile dévide en raison d'une Exiting de méthode est appelée retour, il ne semble pas être une convention pour nommer ce qui se passe lorsqu'un bloc scope de code est sorti.

La variable locale est détruite quand elle est hors de portée. Peut-être que le processus est appelé comme « sortir du champ »?

Je ne suis pas sûr qu'il ya un nom pour cela. les variables pile sont pour automatique qui ne s'inquiète à leur sujet, jamais, même pas assez pour donner un nom à ce processus de nettoyage automatique.

l'appeler "sortir du champ d'application", je suppose.

Je l'ai toujours entendu parlé comme « sortir du cadre » ou plus précisément « une variable auto allant hors de portée ».

Si ce que vous vous demandez comment l'appel de méthode est effectivement mis en œuvre dans le code de la machine, je dirais que cela dépendrait de la convention d'appel utilisée

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top