La forma más concisa de deshabilitar la clase de copia en C ++ 11

Tengo un problema al tratar con obsoleto desde la generación predeterminada de C ++ 11 de constructor de copia y operador de asignación de copia cuando hay un destructor definido por el usuario.

Para la mayoría de las clases suficientemente simples, los constructores, operadores y destructores generados por defecto están bien. Considere las siguientes razones para declarar destructor:

Hacer virtual destructor trivial en clase base:

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

¿Los 4 métodos especiales de copiar y mover serían generados por el compilador en estos casos? En caso afirmativo, creo que está bien y no hay necesidad de complicarlo.Base1 oBase2.

Impresión de mensaje de depuración en destructor:

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

Creo que en este caso se generaría un constructor de copia y un operador de asignación; pero mover constructor y operador de asignación no lo haría. Quiero evitar el uso de la generación predeterminada en desuso y deshabilitar la copia deD. También quiero evitar inundacionesD con 4deleted Declaraciones ¿Deshabilitar solo un constructor de copia es suficiente? ¿Es un buen estilo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta