Destructor virtual puro en C ++

¿Es malo escribir?

class A { public: virtual ~A() = 0; }; 

para una clase base abstracta?

Al menos eso comstack en MSVC … ¿Se bloqueará en tiempo de ejecución?

Sí. También necesita implementar el destructor:

 class A { public: virtual ~A() = 0; }; inline A::~A() { } 

debería ser suficiente.

Y como esto obtuvo un voto negativo, debería aclarar: si deriva algo de A y luego intenta eliminarlo o destruirlo, eventualmente se llamará al destructor de A Como es puro y no tiene una implementación, se producirá un comportamiento indefinido. En una plataforma popular, invocará el controlador purecall y se bloqueará.

Editar: arreglando la statement para que sea más conforme, comstackdo con http://www.comeaucomputing.com/tryitout/

Destructores privados: le darán un error cuando cree un objeto de una clase derivada, de lo contrario. Un diagnóstico puede aparecer sin embargo.

12.4 Destructores

6 Un destructor puede ser declarado virtual (10.3) o puro virtual (10.4); si se crean en el progtwig objetos de esa clase o cualquier clase derivada, se definirá el destructor.

Una clase con un destructor virtual puro es una clase abstracta. Buena nota:

10.4 clases abstractas

2 Una función virtual pura solo debe definirse si se llama con, o como con (12.4), la syntax de id calificado (5.1).

[ Nota : una statement de función no puede proporcionar un especificador puro y una definición-nota final]

Tomado directamente del borrador:

 struct C { virtual void f() = 0 { }; // ill-formed };