什么是 vtable 锚定,以及它在共享对象中的工作原理
What is vtable anchoring, and how does it work in a shared object?
我正在研究C++库的一些问题,并确保应用程序和共享对象之间的类型信息一致。我也有兴趣确保EqualObject
比较有效,这意味着我确实有相同的对象,而不是两个碰巧在operator==
下相等的对象。
此答案状态用于在标头中锚定 vtable。我不熟悉这项技术。或者我听说它叫了另一个名字。
什么是 vtable 锚定,它是如何工作的?
我也知道dynamic_cast、抛出、typeid 不适用于 GCC 常见问题解答中的共享库。
这是非标准技术,但问题相当明显:哪个翻译单元应该包含 vtable?如果虚拟析构函数不是内联的,则它只在一个翻译单元中定义,将 vtable 放在那里是一种简单的选择。
对于可移植代码,这是无关紧要的。你不会关心重复的vtables。
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 在共享缓冲区内存中创建 ::std::string 对象
- 如何创建一个共享对象与另一个.所以在Cmake
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 有没有办法列出所有共享内存对象的名称?
- 共享的从属对象
- 在 Android Studio 中使用 C++ 共享对象时出现问题
- 共享对象、符号、C/C++ 库链接和加载
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 在 win32 上生成 R 包:无法加载共享对象 (.dll)
- C++对象共享属性 - 使用指针或引用
- 如何测试共享对象/共享库已正确编译
- 创建对象共享指针以共享指针为参数
- 限制C++中虚拟基类的对象共享
- 在Ada95中跨共享库/对象共享数据
- 这种线程间对象共享策略是否合理
- 如何更改对象共享指针指向,而它被其他线程占用
- 初始化仅由一组对象共享的静态变量