Sdílet prostřednictvím


novtable

Specifické pro Microsoft

Jedná se o doplňkový atribut __declspec.

Tuto formu __declspec lze použit pro všechny deklarace tříd, ale měla by být použita pouze na třídy s čistým rozhraním, z nichž nikde nebude vytvořena instance samostatně.__declspec ukončí generování kódu kompilátoru pro inicializaci konstruktorů vfptr a destruktorů třídy.V mnoha případech jsou tímto odebrány odkazy na vtable, které jsou přidruženy ke třídě a tedy budou odebrány propojovacím programem.Použití této formy __declspec může vést k významnému snížení velikosti kódu.

Při pokusu o vytvoření instance třídy označené jako novtable a následném přístupu k členu třídy nedojde nikdy k obdržení narušení přístupu (AV).

Příklad

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

Viz také

Referenční dokumentace

__declspec

Klíčová slova jazyka C++