¿Está mal escribir:
class A {
public:
virtual ~A() = 0;
};
para una clase base abstracta?
Al menos eso se compila en MSVC ... ¿Se bloqueará en tiempo de ejecución?
c++
polymorphism
destructor
pure-virtual
Ivan Krechetov
fuente
fuente
Respuestas:
Si. También necesita implementar el destructor:
Debería ser suficiente.
Y dado que esto obtuvo un voto negativo, debo aclarar: si obtiene algo de A y luego trata de eliminarlo o destruirlo,
A
finalmente se llamará al destructor. Como es puro y no tiene una implementación, se producirá un comportamiento indefinido. En una plataforma popular, invocará el controlador de llamada pura y se bloqueará.Editar: arreglando la declaración para que sea más conforme, compilada con http://www.comeaucomputing.com/tryitout/
fuente
Destructores privados: le darán un error cuando cree un objeto de una clase derivada, no de otra manera. Sin embargo, puede aparecer un diagnóstico.
Una clase con un destructor virtual puro es una clase abstracta. Buena nota:
Tomado directamente del borrador:
fuente