Skip to content

Latest commit

 

History

History
75 lines (67 loc) · 1.86 KB

inicializacao.org

File metadata and controls

75 lines (67 loc) · 1.86 KB

Inicialização, Finalização, Cópia

1 Inicialização e finalização

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

2 Copiando objetos por cópia rasa (shallow copy)

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;

3 Problema da cópia rasa

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;

4 Copiando objetos por cópia profunda

Cópia profunda

  • Criam-se novas cópias completas dos atributos
  • Método deve ser recursivo (custo em tempo, memória)