novtable

Specifici di Microsoft

Si tratta di un oggetto __declspec attributo esteso.

Questa forma di __declspec può essere applicato a qualsiasi dichiarazione di classe, ma deve essere applicato solo alle classi e di interfacce, ovvero, classi che non verranno mai utilizzate per creare istanze di per sé.__declspec interrompe il compilatore di generare codice per inizializzare il vfptr nei costruttori e nel distruttore della classe.In molti casi, si rimuove gli unici riferimenti a vtable associati alla classe e, pertanto, il linker la in.Utilizzando questa forma di __declspec può comportare una riduzione significativa della dimensione del codice.

Se si tenta di creare un'istanza di una classe contrassegnata con novtable quindi membro della classe, si riceverà una violazione di accesso (AV).

Esempio

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

Vedere anche

Riferimenti

__declspec

Parole chiave C++