问题标签 [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.
c++ - 内存中的虚拟表布局?
虚拟表如何存储在内存中?他们的布局?
例如
A 类和 B 类的虚拟表在内存中的布局如何?
c++ - C++ 继承/VTable 问题
更新:将析构函数示例替换为直接方法调用示例。
你好,
如果我有以下代码:
- B中有VTable吗?B 没有虚函数,但从 b::func0() 调用 a::func0()
- func1 是否驻留在 VTable 中?它不是虚拟的。
- func2 是否驻留在 VTable 中?
- 如果 b::func0() 中没有 aa::func0() 调用,上述答案是否会有所不同?
谢谢
c++ - 为什么 C++ 继承机制不透明?
例如,为什么没有语言支持来检查 vtable?为什么我不能用新的成员函数替换成员函数?我有一种直觉,有办法很好地利用这些功能。
有没有其他语言可以让我做这样的事情?
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...
现在的错误
c++ - Virtual析构函数和Vtable之间是否有任何关系
如果我们编写虚函数,它会在该类的对象中添加一个 vtable。虚拟析构函数也是如此吗?是vtable用来实现析构函数的虚化吗
c++ - 虚拟指针的大小-C++
C ++中虚拟表的虚拟指针(VPTR)的大小是多少?这也不是一个家庭作业问题......只是我在阅读 C++ 书籍时想到的一个问题。
c++ - 用于类(vtables)的 C++ 单独编译器?
我想知道用一个不允许多重继承的编译器编译 A 类,并编译支持它的 B 类(以及从 A 类派生的 B 类)的后果是什么。
我不太了解链接过程...可以同时使用两者吗?在这种情况下使用单独的编译器和 vtables 存在哪些缺点?使用 B 类的代码是否无法正常运行?
谢谢。
c++ - 未定义的符号“vtable for ...”和“typeinfo for ...”?
几乎是最后一步,但仍有一些奇怪的错误....
vtable和typeinfo是什么意思?
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 完成的。