Я пытаюсь узнать, насколько чувствительной является vtable класса в C ++, и для этого мне нужно знать, необходима ли перекомпиляция всей иерархии классов (всего, 3 заголовочных файла) для 3 сценариев изменений, которые я список ниже. Во-первых, вот моя иерархия классов:
class A {
public:
virtual void method1() = 0;
virtual void method2() = 0;
virtual ~A() {}
};
class B : public A {
public:
virtual void method1() {};
virtual void method2() {};
virtual ~B() {}
};
class C : public A {
public:
virtual void method1() {};
virtual void method2() {};
virtual ~C() {}
};
Вот мои сценарии:
В базовый класс A добавлен не виртуальный метод:
void method3() {};
В базовый класс A добавлен виртуальный метод с телом:
virtual void method3() {};
В базовый класс A добавлен чисто виртуальный метод:
virtual void method3() = 0;
В сценарии 1 изменения в vtable не вносятся. Требуется ли перекомпиляция B и C?
В сценарии 2 будет ли реконструирована виртуальная таблица для базы A, а следовательно, и для B, и C?
Я знаю, что сценарий 3 заставит классы B и C предоставлять реализации для нового метода. Итак, вся иерархия должна быть перекомпилирована.