Recomendado, 2024

Escolha Do Editor

Diferença entre construtor e destruidor

Às vezes, é necessário inicializar alguma parte de um objeto antes que ele possa ser utilizado. Por exemplo, estamos operando na pilha, antes de executarmos qualquer ação, o topo da pilha sempre deve ser definido como zero. Esse recurso de inicialização automática é executado por meio do 'Construtor'. Provavelmente, se um objeto precisar executar algum código antes de ser destruído. Por exemplo, se um objeto precisar fechar um arquivo que ele abriu, antes de sua destruição. Pode ser realizado com a ajuda de 'Destructor'.

Vamos dar uma olhada em algumas das diferenças básicas entre o construtor e o destruidor com a ajuda do gráfico de comparação

Gráfico de comparação:

Base para comparaçãoConstrutorDestruidor
Propósito
Aloca a memória a um objeto.Ele desaloca a memória de um objeto.
Declaraçãoclass_name (argumentos se houver) {};~ class_name (sem argumentos) {};
ArgumentosConstrutor aceita argumentoO destruidor não aceita nenhum argumento.
ChamandoConstrutor é chamado automaticamente, enquanto o objeto é criado.O destruidor é chamado automaticamente, quando o bloco é encerrado ou o programa termina.
TrabalhandoO construtor permite que o objeto inicialize alguns de seus valores antes, ele é usado.O destruidor permite que o objeto execute algum código no momento de sua destruição.
Ordem de execução
Construtor é chamado em ordem sucessiva.
Destructor são chamados na ordem inversa do construtor.
Em númerosPode haver vários construtores na classe.Mas há sempre um único destrutor na classe.
Copiar ConstrutorO construtor de cópia permite que um construtor declare e inicialize um objeto de outro objeto.Nenhum tal conceito.
Sobre o carregamentoConstrutores podem ser sobrecarregados.O destruidor não pode ser sobrecarregado.

Definição de construtor:

Um construtor é basicamente uma função de membro de classe, que inicializa o objeto e aloca memória para ele. Os construtores podem ser facilmente identificados conforme são declarados e definidos com o mesmo nome da classe. Um construtor não possui nenhum tipo de retorno; então, eles não retornam nada, nem mesmo 'vazio'. Um Construtor é sempre definido na seção pública de uma classe.

Pode haver vários construtores em uma classe; eles podem ser diferenciados com base no número e no tipo de argumentos transmitidos. Se houver vários construtores em uma classe; construtor implícito (construtor do-nothing) deve ser definido junto com eles; não faz nada, mas satisfaz o compilador.

Construtores também podem ser definidos com os argumentos padrão. Considerando que, eles também inicializam o objeto "dinamicamente". Os construtores não podem ser herdados nem podem ser virtuais, mas podem ser sobrecarregados. Eles não podem ser encaminhados para o endereço deles.

Implementação do construtor:

 classe Const {int a, b; public: Const () {// construtor sem parâmetro a = 0; b = 0; } Const (int c, int d) {// construtor com parâmetro a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // esta instrução invoca o construtor} 

Quando C1 é criado, um construtor sem parâmetro é executado, pois C1 não passa nenhum parâmetro. Considerando que, quando C2 é criado, um construtor com parâmetro é executado, pois está passando dois inteiros para o construtor.

Definição de Destructor:

Um Destructor também é uma função de membro de uma classe, que desaloca a memória alocada a um objeto. É definido com o mesmo nome de uma classe, precedido por um símbolo de til (~). Destrutores são sempre chamados na ordem inversa dos construtores.

Há sempre um único destruidor em uma classe, já que ele não aceita nenhum argumento. Objetos locais são destruídos assim que o controle da execução deixa o bloco; por outro lado, objetos globais são destruídos quando o programa inteiro termina. Um destruidor é implicitamente chamado por um compilador. Se as classes são herdadas, e uma classe é derivada da classe pai e tanto a classe filha como uma classe pai possuem destrutores; então, o destruidor da classe derivada é chamado primeiro, seguido pelo destruidor da classe pai.

Implementação do Destructor:

 classe Const {int a, b; public: Const (int c, int d) {// construtor com parâmetro. a = c; c = d; cout << "valor de a e b são" < 

Quando o objeto C1 é criado, um construtor com dois parâmetros do tipo inteiro é invocado e o membro “a, b” é inicializado e o valor de “a, b” é impresso. Depois que o destruidor é invocado e imprime a mensagem "o objeto C1 é destruído".

Diferença chave entre construtores e destruidores

  1. O principal objetivo de um construtor é alocar memória para os objetos quando eles são criados, enquanto o propósito principal de um destruidor é desalocar a memória do objeto quando ele é destruído.
  2. Um construtor tem permissão para aceitar os argumentos, pois os argumentos podem ser usados ​​para inicializar os membros de dados da classe. Um destruidor não aceita nenhum argumento, pois seu único trabalho é desalocar a memória do objeto.
  3. Um construtor é chamado quando um objeto é criado. Por outro lado, um destruidor é chamado quando um programa é finalizado ou o programa sai do bloco no qual o objeto é criado.
  4. Um construtor é geralmente usado para inicializar os membros de dados da classe, ao passo que, um destruidor é usado para permitir que o objeto realize alguma ação antes de ser destruído.
  5. Os construtores são executados na ordem sucessiva, o que significa que, se houver uma classe derivada que herda a classe base e o objeto da classe derivada for criado, ela chamará o construtor da classe base primeiro e, em seguida, o construtor da classe derivada. Por outro lado, o destruidor da classe derivada é chamado primeiro e, em seguida, a classe base significa que um destruidor é executado na ordem inversa do construtor.
  6. Na classe, pode haver vários construtores que são identificados pelos argumentos numéricos passados. Em classe, existe apenas um destruidor.
  7. Existe um conceito de construtor de cópia que permite que um objeto seja inicializado a partir de outro objeto, enquanto o destruidor não possui tal conceito.
  8. Os construtores podem ser sobrecarregados para executar uma ação diferente sob o nome do mesmo construtor, enquanto que os destruidores não podem ser sobrecarregados.

Conclusão:

Além da similaridade, esse construtor e destruidor são a função de membro especial de uma classe e possuem o mesmo nome, a diferença básica entre ambos é, 'construtor' é chamado no momento da alocação de memória e 'destruidor' é chamado na tempo de desalocação de memória de objetos. Ambos, construtor e destruidor são implicitamente chamados pelo compilador, mesmo que eles não estejam definidos na classe.

Top