Condições para geração automática de operadores de atribuição padrão / cópia / movimentação e cópia / movimentação?

Eu quero atualizar minha memory sobre as condições em que um compilador normalmente gera automaticamente um construtor padrão, construtor de cópia e operador de atribuição.

Lembro-me que havia algumas regras, mas não me lembro e também não consigo encontrar um recurso respeitável on-line. Alguém pode ajudar?

A seguir, “gerado automaticamente” significa “implicitamente declarado como padrão, mas não definido como excluído”. Existem situações em que as funções de membro especiais são declaradas, mas definidas como excluídas.

  • O construtor padrão é gerado automaticamente se não houver nenhum construtor declarado pelo usuário (§12.1 / 5).
  • O construtor de cópia é gerado automaticamente se não houver nenhum construtor de movimento declarado pelo usuário ou operador de atribuição de movimento (porque não há nenhum construtor de movimento ou operador de atribuição de movimento em C ++ 03, isso simplifica para “sempre” em C ++ 03) ( §12.8 / 8).
  • O operador de atribuição de cópia é gerado automaticamente se não houver nenhum construtor de movimento declarado pelo usuário ou operador de atribuição de movimento (§12.8 / 19).
  • O destruidor é gerado automaticamente se não houver nenhum destruidor declarado pelo usuário (§12.4 / 4).

C ++ 11 e posterior somente:

  • O construtor de movimento é gerado automaticamente se não houver nenhum construtor de cópia declarado pelo usuário, operador de atribuição de cópia ou destruidor, e se o construtor de movimento gerado for válido (§12.8 / 10).
  • O operador de atribuição de movimento é gerado automaticamente se não houver um construtor de cópia declarado pelo usuário, operador de atribuição de cópia ou destruidor, e se o operador de atribuição de movimento gerado for válido (por exemplo, se não precisar atribuir membros constantes) (§12.8 / 21).

Eu achei o diagrama abaixo muito útil.

Regras C ++ para construtores automáticos e operadores de atribuição de Sticky Bits – Tornando-se uma regra de zero herói