Что означает `*` для __vfptr?
Да, я знаю * - указатель. Это не то, о чем я говорю. В одной из моих программ у меня был набор точек останова, и я заметил, что на авто была переменная __vfptr
со значением 0x000007feed210a00
.
Однако под типом, он просто сказал * и что он. Все остальные указатели в моей программе имели такие типы, как unsigned char*
или some::namespace::Frame*
, или int*
. Это имеет смысл, поскольку указатель привязан непосредственно к определенному классу или типу данных. Но я понятия не имею, что * может быть, действительно ли существуют простые типы указателей?
EDIT: я использую Visual Studio 2010.
Ответы
Ответ 1
__vfptr
содержит таблицу виртуальных методов и содержит информацию, которая позволяет динамическое связывание в наследованиях.
Информация в нем будет включать в себя такие вещи, как указатели функций, чтобы разрешить virtual functions
и информацию о классе и его родителях.
Ответ 2
Ответ явно зависит от реализации и формально относится к вашему отладчику, а не к С++. На практике, однако, некоторый вариант _vptr
является более или менее стандартным (в смысле обычного, а не в смысле определения формальным стандартом) именем для указателя на _vtable
, который, в свою очередь, содержит все виды информации, необходимые для разрешения виртуальных функций и RTTI. Таким образом, _vptr
является указателем на таблицу указателей, смещений и множество других вещей. Отладчик, вероятно, просто избегает необходимости присвоить этой цели имя или описать его структуру.