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?