¿Cómo está destruyendo las variables locales cuando un bloque se terminó normalmente llamado en C ++?

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

  •  25-09-2019
  •  | 
  •  

Pregunta

C ++ llama automágicamente destructores de todas las variables locales en el bloque en orden inverso independientemente de si el bloque se sale normalmente (control cae a través) o se produce una excepción.

Parece que el término pila desenrollar sólo se aplica a este último. ¿Cómo es el proceso anterior (la salida normal del bloque) se llama en relación con la destrucción de las variables locales?

¿Fue útil?

Solución

Un objeto se destruye automáticamente cuando "sale del ámbito". Esto podría ser referido como "regeneración almacenamiento automático", pero que en realidad se refiere a la recolección de basura (hay varios papeles con esa frase en su nombre que utilizan el término para recolección de basura media). Cuando se utiliza para garantizar el apareamiento apropiado de / cierre, bloqueo / desbloqueo abierto, u otras formas de adquisición de recursos con su liberación apropiada, entonces se conoce como el patrón de diseño de Raii (RAII) , que es algo irónico teniendo en cuenta que el aspecto principal de RAII no es la inicialización de recursos o de adquisición, sino su destrucción.

Otros consejos

Pila desenrollar sucede en estos dos casos, es sólo que en ejecución normal de la pila se desenrolla sólo para el contexto del método de llamada (o bloque) cuando los ejecutores devuelve el método (o el bloque se sale). Las variables locales se asignan en la pila, por lo que se limpian en el orden inverso de la asignación, y es este proceso que se llama desenrollando. No es diferente de procesar cualquier otro tipo de datos que desea almacenar en una estructura LIFO - por ejemplo, deshacer, rehacer.

Cuando se produce una excepción el controlador será desenrollar la pila a través de a través de cero o más métodos hasta que encuentra uno que puede detectar la excepción, o hasta que alcanza la parte superior de la pila, en cuyo punto el controlador de excepciones no controlada se llama .

Parece que es la convención de utilizar únicamente el término pila de relajarse en el caso de manejo de excepciones, pero es el mismo proceso que ocurre en cada uno de estos casos. El caso concreto de que los desenrolla pila debido a una excitante método se llama volver, no parece haber ninguna convención para nombrar lo que sucede cuando se sale de ámbito de un bloque de código.

La variable local es destruida cuando se sale del ámbito. Tal vez el proceso se denomina como "salir del alcance"?

No estoy seguro de que hay un nombre para esto. las variables de pila son de modo automático que no se preocupa por ellos, nunca, ni siquiera lo suficiente para dar un nombre para este proceso de limpieza automática.

Lo llaman "salir del alcance", supongo.

Siempre he oído que habla como "ir fuera de alcance" o más precisamente "una variable auto ir fuera de alcance".

Si lo que pregunta es cómo la llamada al método que se implementa en código de máquina, yo diría que dependería de la convención de llamada utilizado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top