Compartilhar via


novtable

Específicos do Microsoft

Este é um __declspec atributos estendidos.

Essa forma de __declspec pode ser aplicado a qualquer declaração de classe, mas só deve ser aplicado a classes interface pura, ou seja, classes que nunca serão instanciados por conta própria.O __declspec pára o compilador da geração de código para inicializar o vfptr na constructor(s) e destruidor da classe.Em muitos casos, isso remove somente referências para o vtable que estão associadas com a classe e, portanto, o vinculador vai removê-lo.Usando este formulário de __declspec pode resultar em uma redução significativa no tamanho do código.

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

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

Consulte também

Referência

__declspec

Palavras-chave C++