Por que o destruidor desativa a geração de métodos de movimentação implícitos?

Eu estava tentando entender o que a regra do zero diz lendoeste blog. Na IMO, ele diz que se você declarar seu próprio destruidor, não esqueça de fazer o construtor de movimentação e a atribuição de movimentação como padrão.

Exemplo:

class Widget {
public:
  ~Widget();         // temporary destructor
  ...                // no copy or move functions
};

"A adição do destruidor tem o efeito colateral de desativar a geração das funções de movimentação, mas como o Widget é copiável, todo o código usado para gerar movimentos agora gera cópias. Em outras palavras, a adição de um destruidor à classe causou presumivelmente movimentos eficientes a serem substituídos silenciosamente por cópias presumivelmente menos eficientes ".

O texto acima de Scott Meyers, dentro das citações, levanta algumas questões em minha mente:

Por que declarar destruidor oculta a semântica da movimentação?O destruidor declarar / definir apenas oculta a semântica da movimentação ou o construtor de cópias e a atribuição de cópias também oculta a semântica da movimentação?

questionAnswers(4)

yourAnswerToTheQuestion