问题标签 [vtable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
22692 浏览

c++ - vtable 存储在内存的哪个位置?

vtable 存储在内存的哪个位置?

0 投票
6 回答
21013 浏览

c++ - 何时在 C++ 中创建 vtable?

编译器究竟什么时候创建虚函数表?

1) 当类包含至少一个虚函数时。

或者

2) 当直接基类包含至少一个虚函数时。

或者

3)当层次结构中任何级别的任何父类包含至少一个虚函数时。

与此相关的一个问题:是否可以在 C++ 层次结构中放弃动态调度?

例如考虑下面的例子。

哪些类将包含 V-Table?

既然 B 没有将 f() 声明为虚拟,那么 C 类会获得动态多态性吗?

0 投票
3 回答
628 浏览

c++ - 分配没有 new[] 的 Derived 数组:指向 Base vtable 的指针不好

基本上,我有一个纯虚拟类 Base,以及一个继承自 Base 的具体类 Derived。然后我分配一块内存并通过简单的转换将其视为 Derived 数组。然后,我使用 = 填充数组。最后,我循环遍历数组,尝试调用在 Base 中声明并在 Derived 中定义的虚方法 GetIndex。

问题是我最终得到一个访问冲突异常,试图读取指向 Base 的 vtable 的指针(在 Visual Studio 调试中,这显示为 __vfptr,它始终为 0xbaadf00d)。

以下是我遇到的问题的一个简单示例:

此行为仅在通过 HeapAlloc 或 malloc 分配内存时发生;如果使用 new[],它工作正常。(此外,之前调用了 4 次 cstor,因此输出为 4 5 6 7。)

0 投票
5 回答
5801 浏览

c++ - 在什么情况下 vtable 指针可以为空(或 0x1)?

我目前正在调试崩溃日志。发生崩溃是因为(c++-)对象的 vtable 指针是 0x1,而据我从崩溃日志中可以看出,该对象的其余部分似乎没问题。

程序在尝试调用虚拟方法时崩溃。

我的问题:在什么情况下 vtable 指针可以变为空?operator delete 是否将 vtable 指针设置为 null?

这发生在使用 gcc 4.0.1(Apple Inc. build 5493)的 OS X 上。

0 投票
4 回答
16793 浏览

c++ - 虚拟表 C++

我读到很多人在写“一个虚拟表存在于一个类中,该类中声明了一个虚函数”。

我的问题是,vtable 是否只存在于具有虚函数的类,或者它是否也存在于从该类派生的类。

例如

问题:如果没有用于派生类的 vtable,那么输出就不会是“派生打印”。因此,IMO 对于任何声明了虚函数的类以及从该类继承的类都存在一个 vtable。它是否正确 ?

0 投票
1 回答
1978 浏览

debugging - 在 GCC 中调试 vtable 链接器错误

有时在使用 GCC 时,我会遇到这样的神秘错误:

未定义对“类名的 vtable”的引用

当它不是由缺少库引起时,这个描述性不太强的错误消息总是让我逐行挖掘代码文件以找到虚函数的缺失实现。有没有办法让链接器告诉我它缺少哪个虚函数,也许是一个标志或什么?还是它可能告诉我但我不明白它在说什么?

0 投票
2 回答
1260 浏览

c++ - “vtable fixup”是什么意思?

我听说过使用“vtable fixup”这个术语。这是什么意思?我问谷歌没有成功。我已经知道什么是 vtable,所以不需要定义。

0 投票
1 回答
229 浏览

c++ - 为什么下面的类有一个虚拟表?

假设我有一个钻石继承情况如下:

最后一行产生了一个编译错误,引用了歧义。据我了解,问题在于编译器不知道将哪个 foo 放在 D 的 vtbl 中,但是如果 D 没有定义自己的任何虚函数,为什么还会有一个 vtbl 呢?

0 投票
1 回答
3640 浏览

c++ - c++ d3d hooking - COM vtable

试图制作一个 Fraps 类型的程序。请参阅评论以了解失败的地方。

0 投票
3 回答
22666 浏览

c# - 虚拟方法表

在讨论密封类时,经常提到术语“虚函数表”。这究竟是什么?不久前我读到了一个方法表(我也不记得这个目的的目的),并且在此处进行谷歌/搜索会显示与 C++ 相关的结果。

谢谢