Qual é o objetivo do destruidor excluído?
Me deparei com a regra (seçãoN3797::12.8/11 [class.copy]
)
Um construtor de copiar / mover declarado implicitamente é um membro público interno de sua classe. Um construtor de copiar / mover padrão para uma classe X é definido como excluído (8.4.3) se X tiver:
[...]
- qualquer classe base direta ou virtual ou membro de dados não estáticos de um tipo com um destruidor queé excluído ou inacessível do construtor padrão, ou
[...]
Mas não consigo fazer com que o ponto do destruidor excluído apareça em uma classe base virtual ou direta. Considere o seguinte exemplo simples:
struct A
{
~A() = delete;
A(){ }
};
struct B : A
{
B(){ }; //error: use of deleted function 'A::~A()'
};
B b;
int main() { }
É perfeitamente claro para mim. Eu defini o construtor de 0 argumentos explicitamente e ele não usa o destruidor da classe base. Mas o compilador pensa o contrário. Não vai funcionar mesmo se definirmosB
do destruidor explicitamente:
struct A
{
~A() = delete;
A(){ }
};
struct B : A
{
B(){ };
~B(){ };
};
//B b;
int main() {
}
Você não poderia esclarecer essa coisa?