ExpertiDict

C++ · Intermediário · Português · Técnico

construtor de cópia

kõstɾuˈtoʁ dʒi ˈkɔpjɐlocução nominal

Construtor que cria um objeto novo a partir de outro do mesmo tipo, com assinatura Classe(const Classe&). Define o que significa copiar, principalmente em classes que possuem recursos.

Onde usar

É chamado ao passar por valor, retornar e inicializar com outro objeto. Em code review, uma classe com ponteiro bruto e sem construtor de cópia próprio é suspeita de dupla liberação.

Em código

class Buf {
  int* d_; std::size_t n_;
public:
  Buf(const Buf& o)
    : d_(new int[o.n_]), n_(o.n_) {
    std::copy(o.d_, o.d_ + n_, d_);
  }
};

Exemplos

Essa classe tem ponteiro bruto e nenhum construtor de cópia próprio; vai dar dupla liberação.

Implementei o construtor de cópia para fazer uma cópia profunda do buffer.

Cuidado

A cópia padrão é membro a membro e copia só o endereço dos ponteiros, o que gera dois donos do mesmo recurso.

Sinônimos

copy constructor

Antônimos

construtor de movimento

Veja também

Todos os termos de C++