我有一个可以编译为共享库(或 Windows 中的 DLL)的库。它有一个派生自另一个库中的另一个类的类。基类有一些虚拟方法,我的类覆盖了其中的一些。例如:
class Base {
public:
virtual void method1();
virtual void method2();
virtual void method3();
};
class Derived: public Base {
public:
virtual void method2();
};
现在我发现其中一种虚拟方法对我的班级不太适用。目前它没有覆盖这个方法,所以我也想覆盖它来修复它的行为:
class Derived: public Base {
public:
virtual void method2();
virtual void method3();
};
这会破坏与旧版本库的二进制兼容性吗?
据我了解,它与仅添加虚函数不同,因为 vtable 中虚方法的数量和顺序保持不变。唯一的区别是我的类的 vtable 中的特定条目现在将包含不同的值。这个对吗?
我也很确定当前使用我的库的应用程序都没有使用该方法,因为它完全损坏并且永远无法工作。所以我不担心破坏对基本方法实现的现有调用。我只是想确保我不会破坏其他任何东西。