ExpertiDict

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

regra dos cinco

ˈʁɛɡɾɐ dus ˈsĩkulocução nominal

Se uma classe define manualmente destrutor, construtor de cópia, atribuição por cópia, construtor de movimento ou atribuição por movimento, provavelmente precisa definir ou deletar os cinco.

Onde usar

Surge em classes que gerenciam recursos próprios. Em code review, uma classe com destrutor customizado e sem as demais funções levanta o alerta de cópia rasa e dupla liberação.

Em código

class Recurso {
public:
  ~Recurso();
  Recurso(const Recurso&);
  Recurso& operator=(const Recurso&);
  Recurso(Recurso&&) noexcept;
  Recurso& operator=(Recurso&&) noexcept;
};

Exemplos

Você escreveu o destrutor, então pela regra dos cinco faltam cópia e movimento.

Na revisão pediram para seguir a regra dos cinco ou deletar as cópias.

Cuidado

Não confunda com a regra do zero, que recomenda não escrever nenhuma delas e delegar a posse a membros como unique_ptr e vector.

Sinônimos

rule of five

Antônimos

regra do zero

Veja também

Todos os termos de C++