novtable
Только для систем Microsoft
Это a __declspec расширенный атрибут.
Эта форма __declspec может применяться к любому объявлению класса, но только применяться в чистый классам интерфейса, т е классы, которые никогда не будет создан.__declspec останавливает компилятор из генерации кода для инициализации vfptr в конструкторах и деструкторе класса.В большинстве случаев это удаляет только те ссылки на vtable, связанных с классом, и, таким образом, компоновщик удаляет ее.С помощью следующей формы __declspec может привести к значительной уменьшении размера кода.
При попытке создания экземпляра пометил с, класс novtable затем получите доступ к члену класса, обращается Нарушение прав доступа (антивирусную программы).
Пример
// 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();
}