我试图了解一个类的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重构vtable?
我知道方案3将强制类B和C提供新方法的实现.因此,必须重新编译整个层次结构.