Compartir a través de


novtable

Específicos de Microsoft

Este es un atributo extendido __declspec.

Esta forma de __declspec se puede aplicar a cualquier declaración de clase, pero solo se debe aplicar a clases de interfaz puras, es decir, clases que nunca crearán instancias por sí solas. El objeto __declspec impide que el compilador genere código para inicializar vfptr en los constructores y el destructor de la clase. En muchos casos, esto quita las únicas referencias a la vtable asociadas a la clase y, en consecuencia, el vinculador la quita. El uso de esta forma de __declspec puede producir una reducción significativa del tamaño del código.

Si intenta crear una instancia de una clase marcada con novtable y, a continuación, tener acceso a un miembro de clase, recibirá una infracción de acceso (AV).

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();
}
In Y

FIN de Específicos de Microsoft

Consulte también

__declspec
Palabras clave