Introdução ao Destructor em C ++

Como todos sabemos, o C ++ é uma linguagem de programação orientada a objetos e é amplamente usada nas indústrias de TI para o desenvolvimento de software, drivers, firmware incorporado e aplicativos cliente-servidor. É uma linguagem de nível médio que encapsula recursos de linguagem de alto e baixo nível. Tem um conceito de classes e objetos. No C ++, os construtores desempenham um papel importante na criação de um objeto e na inicialização das variáveis ​​de instância, mas o que acontece com esses objetos e recursos depois que eles não estão mais em uso ou o programa termina? Essa responsabilidade é assumida pelos destruidores em C ++. Destruidores são usados ​​para destruir os objetos criados pelos Construtores quando não são mais necessários para liberar a memória. São funções membro especiais e chamadas automaticamente pelo C ++. compilador para liberar a memória quando não houver destruidor definido pelo usuário no programa. Assim como os construtores, os destruidores também têm o mesmo nome da classe precedido por um sinal de til (~). Mas o destruidor não aceita argumentos / parâmetros e não retorna nada, ou seja, eles não têm nenhum tipo de retorno.

Destrutores nunca podem ser sobrecarregados como construtores em uma classe. Abaixo estão algumas das situações em que o destruidor é chamado automaticamente pelo compilador:

  • Quando um operador de exclusão é chamado.
  • Quando a execução do programa terminar.
  • Quando o bloco / escopo das variáveis ​​locais termina.

Um programador pode definir um destruidor conhecido como construtor projetado pelo usuário. Um destruidor pode ser declarado como Virtual ou virtual puro, mas não pode ser declarado const, volátil, const volátil ou estático.

Como o Destructor funciona em C ++?

Para o trabalho do destruidor, os pontos abaixo mencionados devem ser mantidos em mente:

  • Os destruidores de objetos de classe são chamados primeiro antes de chamar o destruidor de membros e bases. Os destruidores da classe base não virtual são chamados antes dos destruidores da classe base virtual.
  • Antes das classes base, o destruidor de membros não estáticos é chamado. Destruidores de classes base virtuais e não virtuais são chamados na ordem inversa de sua declaração.
  • Destruidores implícitos são chamados automaticamente pelo compilador C ++ quando um objeto sai do escopo ou a execução do programa termina para objetos externos e estáticos em um programa. Os destruidores são chamados para destruir os objetos criados por uma nova palavra-chave.
  • No caso de destruidores implícitos e definidos pelo usuário, o compilador primeiro executa o corpo do destruidor e, em seguida, chama destruidores de todas as classes não variantes não estáticas e depois chama os destruidores de classes base não virtuais e virtuais na ordem inversa de sua construção.

Sintaxe do destruidor

Destrutores em C ++ são precedidos pelo sinal de til (~). Abaixo mencionada é a sintaxe básica do destruidor:

Sintaxe:

Class class_name()
(


public:
class_name(); // Constructor
~class_name(); // destructor
)
)

Na sintaxe, 'class_name' é o nome da classe e, no método principal, são definidos o construtor e o destruidor com o mesmo nome da classe. O destruidor não possui nenhum parâmetro nem tipo de retorno.

Exemplos de destruidor em C ++

Abaixo mencionamos o exemplo de Destructor em C ++:

Exemplo # 1: Programa com destruidor definido pelo usuário

Código:

#include
using namespace std;
class Example1( //class
public:
Example1()( // constructor cout << “Hello I am inside a constructor” << endl;
)
~Example1()( //destructor
cout << “Hello I am inside a destructor” << endl;
)
void display()
(
cout << “Hello this is a display method” << endl
)
);
int main()
(
Example1 ex; //object created
ex.display(); // display method called return 0;
)

Resultado:

No exemplo acima, 'Exemplo1' é o nome da classe e 'ex' é o objeto criado dessa classe. Primeiro, o construtor é chamado, de modo que o texto escrito no construtor é impresso e o método de exibição é chamado ana; por fim, o destruidor é chamado após a execução completa do programa.

Exemplo 2: Programa com destruidor virtual

Código:

#include
using namespace std;
class b1 ( //base class
public:
b1() // constructor of base class
(
cout << “Hello this is base constructor” << endl;
)
~virtual b1() // destructor of base class
(
cout << “Hello this is base destructor” << endl;
)
);
class b2: public b1( // derived class of base class (b1) public:
b2() //constructor of derived cass
(
cout << “Hello this is derived constructor” << endl;
)
~ b2() // destructor of derived class
(
cout << “Hello this is derived destructor” << endl;
)
);
int main(void) //main method
(
b2 *der = new b2();
b1 *bas = der;
delete der;
getchar();
return 0;
)

Resultado:

É uma boa prática tornar o destruidor da classe base tão virtual, pois isso garante que o objeto da classe derivada seja destruído corretamente. Sempre que uma classe virtual é usada, um destruidor virtual deve ser adicionado imediatamente para evitar futuros resultados inesperados.

Vantagens do destruidor em C ++

  • Ele oferece a chance final de limpar os recursos que não estão em uso para liberar a memória ocupada por objetos não utilizados, como excluir objetos dinâmicos, fechar os identificadores do sistema, arquivos usados.
  • Por causa de muitos recursos ocupando espaço e não sendo usados ​​no computador, o destruidor sempre vem com uma boa imagem para reduzir as chances de vazamento de memória, destruindo as coisas não utilizadas.
  • Embora o C ++ tenha o mecanismo de Coleta de Lixo, mas chamar o destruidor automaticamente, independentemente de o programador ligar ou não para liberar espaço, evita que o usuário sofra muitas das piores situações no futuro.

Pontos para resumir sobre o Destructor

  • Destruidores são usados ​​para destruir os recursos não utilizados de uma classe.
  • Destrutores têm o mesmo nome que o nome da classe anterior ao sinal (~).
  • Ao contrário dos construtores, não pode haver parâmetro do destruidor.
  • Não há tipo de retorno de destruidor.
  • Se o usuário não definir o destruidor sozinho em um programa, o compilador automaticamente cria um destruidor para ele.
  • Não pode haver mais de um destruidor em uma única classe.

Conclusão

A descrição acima dos destruidores define claramente o uso e a implementação do destruidor no programa C ++. Embora o conceito de destruidor não seja complexo, é muito importante entender antes da implementação no programa, pois o uso inadequado do destruidor pode levar a resultados inesperados.

Artigo recomendado

Este é um guia para o Destructor em C ++. Aqui discutimos Introdução ao Destructor em C ++ e Working of Destructor, juntamente com as Vantagens. Você também pode consultar nossos outros artigos sugeridos para saber mais:

  1. Destruidor em Java (exemplos)
  2. Introdução à substituição em C ++
  3. Padrões em C ++ (exemplos)
  4. Tipos de construtor em C ++
  5. Destruidor em Python (sintaxe, exemplos)