novtable
Específicos de Microsoft
Éste es un atributo extendido de __declspec .
Este formulario de __declspec se puede aplicar a cualquier declaración de clase, pero solo se deben aplicar a los tipos de interfaces puras, es decir, las clases que nunca se crearán instancias por sí solas.__declspec detiene el compilador de generar código para inicializar el vfptr en los constructores y el destructor de clase.En muchos casos, esto quita las únicas referencias al vtable que son asociado a la clase y, así, el vinculador la quitará.Mediante este formulario de __declspec puede producir una reducción significativa de tamaño de código.
Si intenta crear una instancia de una clase marcada con novtable y después tener acceso a un miembro de clase, recibirá una infracción de (AV) acceso.
Ejemplo
// novtable.cpp
#include <stdio.h>
struct __declspec(novtable) X {
virtual void mf();
};
struct Y : public X {
void mf() {
printf_s("In Y\n");
}
};
int main() {
// X *pX = new X();
// pX->mf(); // Causes a runtime access violation.
Y *pY = new Y();
pY->mf();
}