novtable

Seção específica da Microsoft

Esse é um atributo estendido __declspec.

Essa forma de __declspec pode ser aplicada a qualquer declaração de classe, mas só deve ser aplicada às classes puras da interface, ou seja, classes que nunca serão instanciadas por conta própria. __declspec impede que o compilador gere códigos para inicializar vfptr nos construtores e destruidores da classe. Em diversos casos, isso remove as únicas referências para vtable que estão associadas à classe. Portanto, o vinculador as removerá. Usar esta forma de __declspec pode resultar em uma redução significativa do tamanho do código.

Se você tentar instanciar uma classe marcada com novtable e, em seguida, acessar em um membro da classe, você receberá uma AV (violação de acesso).

Exemplo

// 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

Fim da seção específica da Microsoft

Confira também

__declspec
Palavras-chave