Destrutor (programação)
# Destrutor (programação)

Destrutor (do inglês, desctructor) é um método invocado quando a classe deve ser destruída. É utilizado normalmente para liberar a memória alocada dinamicamente pela classe e para eliminar as possíveis referências à classe, quando ela não mais existir.
Um destrutor também pode ser chamado quando um objeto sai fora do seu escopo e/ou para fazer a finalização de dispositivos ou subsistemas que tenham sido ativados como classe. Se o programador não proporcionar construtores e um destrutor para uma classe, o compilador assume as ações mais simples. Em outras palavras, caso não seja definido um construtor e um destrutor para a classe, o compilador cria um construtor e um destrutor default, sem código e sem parâmetros, que são chamados, respectivamente, a cada declaração de instância, e cada vez que a instância sai fora do escopo.

## Características gerais

* Não recebe parâmetros de entrada ou de saída.
* É permitido apenas um destrutor por classe.
* Não pode ser definido em Structs, apenas em Classes.
* Não pode ser herdado ou sobrecarregado.
* Não possui modificadores de acesso.
* É invocado automaticamente, não podendo ser chamado.
* Uma instância pode ser destruída apenas quando nenhum outro recurso utiliza essa instância.
* O controle de quando o Destrutor será chamado é determinado pelo Garbage Collector.
* Em linguagens de programação com o recurso coletor de lixo, que retiram da memória os objetos não referenciados, não há método destrutor, uma vez que o Garbage Collector faz o trabalho de destruição dos objetos.