É errado escrever:
class A {
public:
virtual ~A() = 0;
};
para uma classe base abstrata?
Pelo menos isso compila no MSVC ... Ele trava no tempo de execução?
c++
polymorphism
destructor
pure-virtual
Ivan Krechetov
fonte
fonte
Respostas:
Sim. Você também precisa implementar o destruidor:
deve ser suficiente.
E uma vez que houve uma votação negativa, devo esclarecer: se você extrair algo de A e tentar excluí-lo ou destruí-lo,
A
o destruidor de eventualmente será chamado. Como é puro e não possui uma implementação, um comportamento indefinido se seguirá. Em uma plataforma popular, isso invocará o manipulador de chamadas e falhas.Editar: corrigindo a declaração para ser mais compatível, compilada com http://www.comeaucomputing.com/tryitout/
fonte
Destruidores particulares: eles darão um erro quando você criar um objeto de uma classe derivada - não de outra forma. Um diagnóstico pode aparecer.
Uma classe com um destruidor virtual puro é uma classe abstrata. Observe bem:
Retirado direto do rascunho:
fonte