我有一个库可以编译为共享库(或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中的特定条目现在将包含不同的值。它是否正确?
我也很确定,目前使用我的库的应用程序都没有使用该方法,因为它完全被破坏并且从未工作。所以我不担心打破对基本方法实现的现有调用。我只是想确保我不会破坏别的东西。
逻辑上,它听起来应该没问题。但我不确定在C++中维护二进制兼容性的确切规则。 – Mysticial