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)
- 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!