C++ · Intermediário · Português · Técnico
construtor de movimento
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