Tempo de vida de objetos (de variáveis)
- Inicializar um objeto no início de seu tempo de vida
- Construtor
- \pause Finalizar quando sua vida chega ao fim
- Destrutor
Questões de projeto
- Escolhendo um construtor
- Vários construtores com mesmo nome (parâm. diferentes)
- Construtor de cópia em C++ para a classe X \linebreak
X(const X& copy_from_me);
- \pause Referências e/ou valores
- Qual abordagem gera código mais rápido?
- Insistência do C++ em ter objeto valor
- \pause Ordem de execução
- Qual construtor/destrutor chamar primeiro?
- \pause Coletor de lixo
Padrão em C++
Copia cada membro de um objeto individualmente
class Centavos {
private: int valor;
public: Cents(int v=0) {
valor = v;
}
};
...
Centavos c(25);
Centavos b = c;
O que acontece quando o código abaixo é executado?
class MinhaString {
private:
char *string;
int tamanho;
...
}
MinhaString ola("Ola!");
{
MinhaString copia = ola;
}
std::cout << ola.GetString() << std::endl;
Cópia profunda
- Criam-se novas cópias completas dos atributos
- Método deve ser recursivo (custo em tempo, memória)