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?