Diferença entre construtor e destruidor

Autor: Laura McKinney
Data De Criação: 1 Abril 2021
Data De Atualização: 11 Poderia 2024
Anonim
Diferença entre construtor e destruidor - Tecnologia
Diferença entre construtor e destruidor - Tecnologia

Contente


Construtor e destruidor são as funções de membro com o mesmo nome que sua classe. O primeiro tipo construtor ajuda na inicialização de um objeto. Por outro lado, um destruidor é diferente do construtor que exclui o construtor criado quando é inútil.

Às vezes, é necessário inicializar parte de um objeto antes que ele possa ser utilizado. Por exemplo, estamos operando na pilha, antes de executar qualquer ação, a parte superior da pilha sempre deve estar definida como zero. Esse recurso de inicialização automática é realizado por meio do "Construtor". Por exemplo, 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. Isso pode ser realizado com a ajuda de 'Destructor'.

Vamos apresentar algumas das diferenças fundamentais entre construtor e destruidor com a ajuda de um gráfico de comparação


  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

Gráfico de comparação:

Base para comparaçãoConstrutorDestruidor
Finalidade

Aloca a memória para um objeto.Desaloca a memória de um objeto.
Declaração class_name (argumentos se houver) {};~ class_name (sem argumentos) {};
Argumentos Construtor aceita argumento O destruidor não aceita nenhum argumento.
ChamandoO construtor é chamado automaticamente, enquanto o objeto é criado.O destruidor é chamado automaticamente, quando o bloco é encerrado ou o programa é finalizado.
TrabalhandoO construtor permite que um objeto inicialize parte de seu valor antes de ser usado.O destruidor permite que um objeto execute algum código no momento de sua destruição.
Ordem de execução

O construtor é chamado em ordem sucessiva.
O destruidor é chamado na ordem inversa do construtor.
Em números Pode haver vários construtores em uma classe.Sempre há um único destruidor na classe.
Copiar Construtor O construtor Copy permite que um construtor declare e inicialize um objeto de outro objeto.Não existe esse conceito.
Sobre o carregamento Os construtores podem estar sobrecarregados.O destruidor não pode ser sobrecarregado.


Definição de Construtor:

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

Pode haver vários construtores em uma classe; eles podem ser distinguidos com base no número e 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.

Os construtores também podem ser definidos com os argumentos padrão. Enquanto isso, eles também inicializam o objeto “dinamicamente”. Os construtores não podem ser herdados, nem virtuais, mas podem ser sobrecarregados. Eles não podem ser referidos para o endereço deles.

Tipos de construtores

Existem basicamente três tipos de construtores - Construtores padrão, parametrizados e de cópia.

  • Construtor Padrão: É um construtor em que nenhum argumento é fornecido ao construtor. O construtor padrão não possui parâmetro, mas os valores para o construtor padrão podem ser transmitidos por padrão (dinamicamente).
  • Construtor parametrizado: Esse tipo de construtor aceita os argumentos; podemos passar valores diferentes para os membros de dados como argumentos.
  • Copiar Construtor: O construtor Copy é diferente de outros tipos de construtores porque aceita o endereço do outro objeto como argumento.

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 o parâmetro a = c; c = d; }}; int main () {Const C1; C2 (10,20); // esta declaração chama o construtor}

Quando C1 é criado, um construtor sem parâmetro é executado, pois C1 não passa nenhum parâmetro. Enquanto que C2 é criado, um construtor com o parâmetro é executado, pois passa dois números inteiros para o construtor.

Definição de Destruidor:

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

Sempre existe um único destruidor em uma classe, pois 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 é chamado implicitamente por um compilador. Se as classes são herdadas e uma classe é derivada de uma classe pai, e a classe filho e a classe pai têm destruidores; 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 << "o valor de a e b são" <<>

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

Necessidade de destruidor

A criação do construtor consome uma certa quantidade de espaço na memória, pois acaba alocando memória para os objetos. Essa memória alocada deve ser desalocada antes da destruição dos objetos para liberar os recursos para outras tarefas. Os destruidores são extremamente úteis para a finalidade pretendida, que destrói efetivamente objetos e executa tarefas de limpeza para liberar a memória.

  1. O objetivo principal de um construtor é alocar memória para os objetos quando eles são criados. Por outro lado, o principal objetivo 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. Por outro lado, 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 em que um objeto é criado.
  4. Um construtor é geralmente usado para inicializar os membros de dados da classe, enquanto um destruidor é usado para permitir que o objeto execute 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, ele 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 aula, pode haver vários construtores que são identificados pelos argumentos numéricos passados, enquanto ele pode ter apenas um destruidor.
  7. Existe um conceito de construtor de cópias que permite que um objeto seja inicializado a partir de outro objeto enquanto o destruidor não possui esse conceito.
  8. Os construtores podem estar sobrecarregados para executar ações diferentes sob o nome do mesmo construtor. Pelo contrário, os destruidores não podem ser sobrecarregados.

Conclusão:

Além da semelhança, que construtor e destruidor são a função de membro especial de uma classe e possuem o mesmo nome, a diferença essencial entre os dois é que 'construtor' é chamado no momento da alocação de memória e 'destruidor' é chamado no desalocação da memória dos objetos no tempo. O construtor e o destruidor são chamados implicitamente pelo compilador, mesmo que não estejam definidos na classe.