novtable
Spécifique à Microsoft
Il s'agit d'un attribut étendu d' __declspec .
Ce formulaire d' __declspec peut être appliqué à une déclaration de classe, mais doit s'appliquer qu'aux classes d'interfaces pures, c. autrement dit., les classes qui ne seront jamais instanciées sur leur.__declspec arrête le compilateur de code de génération pour initialiser le vfptr dans les constructeurs et le destructeur de la classe.Dans de nombreux cas, cela supprime les seules références aux vtable associés à la classe et, par conséquent, l'éditeur de liens l'supprimera.À l'aide de ce formulaire d' __declspec peut provoquer une réduction significative de nombreuses instructions.
Si vous essayez d'instancier une classe marquée avec novtable puis d'accéder à un membre de classe, vous recevez une violation d'accès (AV).
Exemple
// 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();
}