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