ExpertiDict

C++ · Avançado · Inglês · Técnico

copy and swap

ˈkɑːpi ænd swɑːpsubstantivo

Idioma que implementa a atribuição recebendo o argumento por valor e trocando seu conteúdo com *this via swap. Dá garantia forte de exceção e trata a autoatribuição sem teste especial.

Onde usar

Em code review, aparece como alternativa enxuta a escrever atribuição por cópia e por movimento separadas: um único operator=(Classe o) cobre as duas. Exige um swap que não lança.

Em código

struct Buf {
  int* d_; std::size_t n_;
  Buf& operator=(Buf o) noexcept {
    std::swap(d_, o.d_);
    std::swap(n_, o.n_);
    return *this;  // o leva o estado antigo
  }
};

Exemplos

I used copy and swap to get the strong exception guarantee.

Usei copy and swap para ter a garantia forte de exceção.

With copy and swap, self-assignment just works without an if.

Com copy and swap, a autoatribuição funciona sem precisar de um if.

Cuidado

Pode ser mais lento que uma atribuição manual quando o destino já tem capacidade reaproveitável, como em std::vector.

Veja também

Todos os termos de C++