O que é a regra dos cinco, e o que o compilador gera para você?
Se uma classe precisa de um destrutor, construtor de cópia ou atribuição de cópia personalizados, quase certamente precisa dos cinco mais o construtor de movimento e a atribuição de movimento — porque ela possui um recurso. O compilador os gera implicitamente, mas declarar qualquer um deles suprime alguns dos outros: escrever um destrutor para a geração das operações de movimento, e as cópias silenciosamente tomam o lugar delas. A regra dos zero é ainda melhor — possuir recursos através de membros que já se gerenciam sozinhos.