Como está a destruir a variáveis locais quando um bloco é encerrado normalmente chamado em C++?

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

  •  25-09-2019
  •  | 
  •  

Pergunta

C++ automagicamente chamadas de processos de destruição de todas as variáveis locais ao bloco em ordem inversa, independentemente de se o bloco é encerrado normalmente de controle (cai) ou uma exceção é lançada.

Parece que o termo desenrolar a pilha aplica-se apenas a este último.Como é o antigo processo (o normal de saída do bloco) chamado relativas a destruição de variáveis locais?

Foi útil?

Solução

Um objeto é automaticamente destruída quando ele "sai do escopo".Isto pode ser referido como "automático de armazenamento de recuperação", mas que, na verdade, refere-se à coleta de lixo (existem de vários artigos com essa frase em seu nome, que usa o termo para significar a coleta de lixo).Quando ele é usado para garantir o correcto emparelhamento de abrir/fechar, bloquear/desbloquear, ou outras formas de aquisição de recursos com a sua versão, em seguida, ele é conhecido como o padrão de design de Aquisição de recursos é de Inicialização (RAII), que é um pouco irônico, dado que o principal aspecto de RAII não é o recurso de inicialização ou de aquisição, mas sim a sua destruição.

Outras dicas

Desenrolar a pilha acontece em ambos os casos, só que em condições normais de execução, a pilha é organizada apenas para o contexto do método de chamada (ou bloco) quando executar o método retorna (ou o bloco é encerrado).Variáveis locais são alocados na pilha, de modo que eles são limpos, em ordem inversa de alocação, e é este processo que é chamado de relaxar.Não é diferente do que o processamento de qualquer outro tipo de dados que você deseja armazenar em uma estrutura LIFO - e.desfazer, refazer.

Quando uma exceção é lançada a rotina de tratamento de relaxar a pilha através de zero ou mais métodos até encontrar um que pode capturar a exceção, ou até atingir o topo da pilha, no ponto em que o manipulador de exceção não tratada será chamado.

Parece ser a convenção de usar somente o termo pilha desenrolar no caso de manipulação de exceção, mas é o mesmo processo que ocorrem em cada um desses casos.O caso específico em que a pilha desenrola devido a um método de saída é chamado de retornar, não parece ser uma convenção de nomenclatura que acontece quando um escopo de bloco de código é encerrado.

A variável local é destruído quando ele sai do escopo.Talvez o processo é chamado como "fora do escopo"?

Eu não tenho certeza se há um nome para isso.As variáveis de pilha são então, automático que ninguém se preocupa com eles, nunca, nem mesmo o suficiente para dar um nome para este processo de limpeza.

Chamá-lo de "fora do escopo", eu acho.

Eu sempre ouvi falar como "fora do escopo" ou mais precisamente "um auto variável fora do escopo".

Se o que você está perguntando é como a chamada do método é, na verdade, implementado em código de máquina, eu diria que iria depender da convenção de chamada utilizado

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top