C++ · Intermediário · Português · Técnico
regra dos cinco
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