Maneira mais concisa de desativar a classe de cópia no C ++ 11

Eu tenho um problema ao lidar com o uso descontinuado desde a geração padrão C ++ 11 do construtor de cópias e do operador de atribuição de cópias quando há um destruidor definido pelo usuário.

Para a maioria das classes suficientemente simples, os construtores, operadores e destruidores gerados por padrão são bons. Considere os seguintes motivos para declarar destruidor:

Tornando o destruidor trivial virtual na classe base:

// header
class Base1 { public: virtual ~Base1() = default; };
class Base2 { public: virtual ~Base2(); };
// source
Base2::~Base2() = default;

Todos os 4 métodos especiais de copiar e mover seriam gerados pelo compilador nesses casos? Se sim, então eu acho que está bem e não há necessidade de complicarBase1 ouBase2.

Imprimir mensagem de depuração no destruidor:

// header
class D { public: ~D(); };
// source
D::~D() {
#ifdef DEBUG_THIS
    std::cout << "D was destructed." << std::endl;
#endif
}

Eu acredito que, neste caso, o construtor de cópias e o operador de atribuição seriam gerados; mas mover o construtor e o operador de atribuição não o faria. Quero evitar o uso da geração padrão descontinuada e desativar a cópia deD. Eu também quero evitar inundaçõesD com 4deleted declarações. Desabilitar apenas um construtor de cópia é suficiente? É um bom estilo?

questionAnswers(4)

yourAnswerToTheQuestion