Pular para conteúdo

Aula 10 - Construtores e Destrutores 🏗️


O Ciclo de Vida do Objeto

  • Nascimento: Construtor
  • Vida: Uso de métodos/atributos
  • Morte: Destrutor

O Construtor

  • Método especial chamado automaticamente na criação do objeto.
  • Mesmo nome da classe, sem tipo de retorno.

Construtor Padrão (Default)

Classe() { ... }
- Criado pelo C++ se você não definir nenhum.


Construtor Parametrizado

Produto(string n, float p) : nome(n), preco(p) {}
- Permite criar objetos já configurados.


Member Initializer List

  • : nome(n), preco(p)
  • Mais eficiente que atribuir dentro das chaves {}.

Sobrecarga de Construtores

  • Podemos ter vários construtores para diferentes formas de criar o objeto.

Delegating Constructors (C++11)

  • Um construtor que chama outro da mesma classe para evitar repetição.

Construtor de Cópia (Copy Constructor)

  • Chamado quando criamos um objeto a partir de outro (A = B).
  • Importante para classes com ponteiros!

Cópia Rasa vs Profunda (Shallow vs Deep)

  • Rasa: Copia o endereço do ponteiro (Perigoso!).
  • Profunda: Aloca nova memória e copia o conteúdo (Seguro).

O Destrutor

  • Chamado automaticamente quando o objeto sai de escopo ou é deletado.
  • Nome precedido por til (~): ~Classe().

Para que serve o Destrutor?

  • Liberar memória alocada dinamicamente (delete).
  • Fechar conexões de banco de dados e arquivos.

Chamada Automática

{
   Objeto obj; // Construtor
} // Saiu do bloco: Destrutor automático

Destrutores Virtuais

  • Essenciais em hierarquias de herança para evitar memory leaks.

Explicit Constructors

  • Impede conversões de tipo automáticas indesejadas.
  • explicit MeuTipo(int x);

Deleted Functions (C++11)

  • Classe(const Classe&) = delete;
  • Impede que um objeto seja copiado.

Defaulted Functions

  • Classe() = default;
  • Pede para o compilador gerar a versão padrão.

RAII (Revisitado)

  • Resource Acquisition Is Initialization.
  • A base da segurança de memória no C++ moderno.

Debugging: Ordem de Chamada

  • Em herança, a base é construída primeiro.
  • O filho é destruído primeiro.

Estratégias de Gerenciamento

  • No C++ Moderno, evite gerenciar memória manualmente nos construtores/destrutores.
  • Use Smart Pointers!

Resumo da Aula

  • Construtores preparam o objeto.
  • Destrutores limpam a bagunça.
  • Use a lista de inicialização sempre que possível.

Fim da Aula 10

  • Próxima aula: Herança e Polimorfismo!