问题标签 [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 回答
18819 浏览

c++ - 内存中的虚拟表布局?

虚拟表如何存储在内存中?他们的布局?

例如

A 类和 B 类的虚拟表在内存中的布局如何?

0 投票
4 回答
2692 浏览

c++ - C++ 继承/VTable 问题

更新:将析构函数示例替换为直接方法调用示例。

你好,

如果我有以下代码:

  1. B中有VTable吗?B 没有虚函数,但从 b::func0() 调用 a::func0()
  2. func1 是否驻留在 VTable 中?它不是虚拟的。
  3. func2 是否驻留在 VTable 中?
  4. 如果 b::func0() 中没有 aa::func0() 调用,上述答案是否会有所不同?

谢谢

0 投票
11 回答
608 浏览

c++ - 为什么 C++ 继承机制不透明?

例如,为什么没有语言支持来检查 vtable?为什么我不能用新的成员函数替换成员函数?我有一种直觉,有办法很好地利用这些功能。

有没有其他语言可以让我做这样的事情?

0 投票
3 回答
4170 浏览

c++ - cppunit 和 xcode 项目的 vtable 问题

我正在尝试构建 zxing iphone 项目并运行用 cppunit-1.12.1 编写的测试套件。我在项目中复制了 cppunit-1.12.1 代码,并将活动 SDK 更改为 10.5,我能够构建 cppunit 和 zxingcore 目标,但是当我尝试构建 zxingcore-tests 目标时,出现以下错误,这似乎与 vtables 有关,并且与库的体系结构类型有关的奇怪警告:

有没有一种很好的格式化方法,基本上是转义格式,而不必在每一行的前面插入一个 >。我使用<pre>了在预览中效果很好的标签,但在最终渲染中却没有——不尊重格式并切断了文本。一旦有人给我建议,我会修改格式。

....many more of these warnings...

现在的错误

0 投票
6 回答
2092 浏览

c++ - Virtual析构函数和Vtable之间是否有任何关系

如果我们编写虚函数,它会在该类的对象中添加一个 vtable。虚拟析构函数也是如此吗?是vtable用来实现析构函数的虚化吗

0 投票
6 回答
6404 浏览

c++ - 虚拟指针的大小-C++

C ++中虚拟表的虚拟指针(VPTR)的大小是多少?这也不是一个家庭作业问题......只是我在阅读 C++ 书籍时想到的一个问题。

0 投票
4 回答
317 浏览

c++ - 用于类(vtables)的 C++ 单独编译器?

我想知道用一个不允许多重继承的编译器编译 A 类,并编译支持它的 B 类(以及从 A 类派生的 B 类)的后果是什么。

我不太了解链接过程...可以同时使用两者吗?在这种情况下使用单独的编译器和 vtables 存在哪些缺点?使用 B 类的代码是否无法正常运行?

谢谢。

0 投票
5 回答
48182 浏览

c++ - 未定义的符号“vtable for ...”和“typeinfo for ...”?

几乎是最后一步,但仍有一些奇怪的错误....

vtable和typeinfo是什么意思?

0 投票
7 回答
897 浏览

c++ - 虚拟表未定义

我写了一些代码,但我无法编译它:

这是我从 g++ 得到的:

这个问题是基于声明的循环依赖

0 投票
2 回答
3120 浏览

c++ - 将 EXE 作为 DLL 加载,本地 vftable

我有一个名为的 exe test.exe,通常用作独立应用程序。我想将此 exe 用作另一个应用程序 app.exe 中的模块(dll)。

test.exe 中的代码做了一些非常简单的事情,比如:

虚拟在哪里someMethod(),MyClass 有一个虚拟的 d'tor。
doTest()从 test.exe 导出,因此创建了一个名为 test.lib 的库 app.exe
与此库链接以在启动时静态加载 test.exe。

当我单独运行 test.exe 时,它​​运行得很好,但是当我从 app.exe 中加载它时,它会崩溃。
使用调试器单步执行代码会发现崩溃是在调用虚拟方法时发生的。事实证明,vftable 不知何故变坏了。

经过一番调查,事实证明,当 MyClass 的构造函数中的代码正在运行时,vftable 是一回事,但是当调用new返回时,它会被称为“本地 vftable”的其他东西替换。我发现这个关于为什么会这样的模糊讨论

经过大约一天的调试后,我发现这个“本地 vftable”中的指针在两种情况下都是相同的,当 test.exe 是独立的和作为模块加载时。这不可能是正确的,因为 test.exe 被加载到不同的地址......
为了测试这个理论,我将链接器选项中的加载地址更改为 test.exe 在 app.exe 中时加载的地址,现在,瞧,一切正常。

显然,这不是一个永久的解决方案,因为下一次这个随机选择的地址可能会被占用,同样的问题会再次出现。

所以我的问题是:为什么这个“本地 vftable”与 exe 的静态加载地址相关联?将exe作为模块加载是一件坏事吗?为什么exe假定它已加载到其静态地址?

只是为了上下文:这一切都是通过 MSVC 2008、Windows XP x64 完成的。