【问题标题】:What does type `*` mean for __vfptr?`*` 类型对 __vfptr 意味着什么?
【发布时间】:2013-01-16 21:20:12
【问题描述】:

是的,我知道 * 是一个指针。这不是我要说的。在我的一个程序中,我设置了一个断点,我注意到在汽车中有一个变量__vfptr,其值为0x000007feed210a00

但是在类型下,它只是说 * 就是这样。我程序中的所有其他指针都有unsigned char*some::namespace::Frame*int* 之类的类型。这些是有意义的,因为指针直接绑定到特定的类或数据类型。但我不知道 * 可能是,真的只有简单的指针类型吗?

编辑:我使用的是 Visual Studio 2010。

【问题讨论】:

  • 请问您能发布确切的代码行吗?
  • 你用什么调试器?
  • __vfptr 似乎表示指向虚函数的指针。可能调试器无法解析那里的确切类型。
  • 什么环境?什么调试器?程序是用什么语言编写的? 如果类似于 C,变量名中的 __ 将表示某种实现内部细节,而裸露的 * 可能是 void * 的某种缩写,或者可能是其他类型内部“通用指针”。

标签: c++ visual-studio pointers visual-studio-debugging


【解决方案1】:

__vfptr 包含Virtual method table,它包含允许在继承中进行动态绑定的信息。

其中的信息将包括 function pointers 以解决 virtual functions 之类的内容,以及有关班级及其父母的信息。

【讨论】:

  • 它包含的内容远不止这些。
【解决方案2】:

答案显然取决于实现,并且正式涉及您的调试器,而不是 C++。然而,在实践中,_vptr 的某些变体或多或少是指向 _vtable 的指针的标准名称(在通常的意义上,而不是在正式标准定义的意义上),它又包含解析虚函数和RTTI所需的各种信息。所以_vptr 是一个指向指针、偏移量和许多其他不同事物的表的指针。调试器可能只是避免给这个目标命名或描述它的结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 2016-01-02
    • 2021-05-17
    • 1970-01-01
    • 2012-01-15
    • 2014-04-03
    • 2021-12-11
    • 2011-12-28
    相关资源
    最近更新 更多