c++ - 二进制兼容性因虚函数而中断

标签 c++ vtable

我看到了这篇二进制兼容性文章 binary_compatibiliy_new_virtuals_to_a_non-leaf_class .
如果我有一个 linux 软件,它有多个共享库和一个加载所有这些库的二进制文件。我在一个仅在一个共享库中完全使用的类中添加了一个虚函数。此链接中提到的这一点是否仍然有效? 根据我的理解,虚拟表存在于共享库中,如果我正在进行任何不会被外界触及的更改,那么我不应该担心该更改的二进制兼容性。

最佳答案

如果您有一个使用该特定类的外部客户端(未重新编译),您将破坏二进制兼容性。因此,在您的情况下,.so 文件中更改的类要么未作为外部接口(interface)的一部分公开,要么未被您的应用程序使用。无论哪种情况,您的应用都将继续运行。

关于c++ - 二进制兼容性因虚函数而中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315241/

相关文章:

c++ - OpenSSL 广播所有连接的客户端 C

c++ - C++中vtable查找的性能影响

c++ - 什么会导致 VTable 指针在 Win32 调试版本中为 0xdddddddd?

c++ - 混合 C++ 和 Fortran

c++ - MSDN 站点上调用 AdjustTokenPrivileges() 的示例代码因 "Cannot enable the SE_LOCK_MEMORY_NAME privilege"而失败

c++ - GetComputerNameW 导致 Windows 10 中的缓冲区溢出

c# - 如何摆脱虚拟表?密封类

c++ - 在 C++ 中声明抽象类

C++基类指针调用子虚函数,为什么基类指针能看到子类成员

c++ - 是否所有类都有编译器为它们创建的 Vtable?