ExpertiDict

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

construtor de movimento

kõstɾuˈtoʁ dʒi movĩˈmẽtulocução nominal

Construtor com assinatura Classe(Classe&&) que assume os recursos de um objeto temporário, deixando-o vazio. Evita copiar dados caros e deve ser marcado noexcept.

Onde usar

Em code review, a ausência de noexcept faz std::vector copiar em vez de mover ao crescer, perdendo desempenho. Costuma ser gerado automaticamente quando vale a regra do zero.

Em código

// membros: int* d_; size_t n_;
Buf(Buf&& o) noexcept
  : d_(o.d_), n_(o.n_) {
  o.d_ = nullptr;  // origem não libera
  o.n_ = 0;
}

Exemplos

Marque o construtor de movimento como noexcept, senão o vector copia na realocação.

O construtor de movimento só troca os ponteiros, não copia o buffer.

Cuidado

Esquecer de anular o ponteiro da origem causa dupla liberação no destrutor.

Sinônimos

move constructor

Antônimos

construtor de cópia

Veja também

Todos os termos de C++