问题 类型`*`对__vfptr意味着什么?


是的我知道*是一个指针。那不是我在说什么。在我的一个程序中,我有一个断点设置,我注意到在汽车中有一个变量 __vfptr 有价值的 0x000007feed210a00

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

编辑 :我正在使用Visual Studio 2010。


923
2018-02-01 14:23


起源

请你发布确切的代码行吗? - Oliver Charlesworth
你用什么调试器? - Necto
__vfptr 似乎表明指向虚函数的指针。可能调试器无法解析那里的确切类型。 - Daniel Fischer
什么环境?什么调试器?这个程序写的是什么语言? 如果 像C一样的东西 __ 在变量名称中将指示某种实现 - 内部细节和裸露 * 可能是一些缩写 void * 或者其他一些内部的“通用指针”。 - vonbrand


答案:


__vfptr 包含 虚方法表 它包含允许动态绑定继承的信息。

其中的信息将包括类似的内容 函数指针 解决 virtual functions 和班级及其父母的信息。


11
2018-02-01 14:26



它包含了很多moe。 - James Kanze


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


5
2018-02-01 14:28