Здравствуйте, NKZ, Вы писали:
NKZ>Сам же __declspec(novtable) подавляет генерацию vtable в класcе следовательно ты не можешь вызывать виртуальные функций этого класса из производного.
не совсем так. или совсем не так

__declspec(novtable) действительно подавляет генерацию vtable путем удаления кода из конструкторов и деструткора, который инициализирует vptr — указатель на vtbl. Но смысл отключения vtbl совсем в другом — если известно, что экземпляр класса никогда не будет создан, то нет необходимости и в vtbl для этого класса.
Пример, классы для ATL-компонентов, которые генерирует визард, объявляются с ATL_NO_VTABLE, так как реально для класса CX создается экземпляр класса CComObject<CX>( он унаследован от CX ).
Никаких побочных эффектов от использования novtable нет — до тех пор пока не создать экземпляр класса, который объявлен с этим модификатором и вызвать виртуальную функцию.
> Обычно ATL_NO_VTABLE ставят на последний класс в цепочке наследования.
Соотв-но нельзя использовать в последнем классе в цепочке наследования — максимум на предпоследнем