gpt4 book ai didi

c++ - 加载 .dll 时实例指针与 vfptr 不同

转载 作者:行者123 更新时间:2023-11-30 02:22:22 32 4
gpt4 key购买 nike

因此,我在使用 Visual Studio 的测试套件时发现了一些有趣的东西:

我在地址处有一个 A 类实例,比方说,0x0656a64c。然后,当我查看变量时,它说它的 __vfptr 指向 0x077e7c0c

据我所知,一个类的虚表指针应该位于类实例的前 4 个字节(或 64 位应用程序上的 8 个字节),除非是多重继承的情况(那么它只是偏移量)第一个虚表地址)。

我观察到 Visual Studio 将我的测试编译成一个 .dll 并运行其测试工具动态加载该 .dll。

这可能是导致地址差异的原因吗?

这是 VS 调试器的屏幕截图

Difference in addresses

最佳答案

您混淆了 vptr 的地址和 vptr 指向的地址。你是(大致)正确的,通常的实现是 vptr 是对象中的第一件事 - 但是 Visual Studio 向你显示 vtable 的地址(它在类的所有对象之间共享).

关于c++ - 加载 .dll 时实例指针与 vfptr 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47198316/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com