Подтвердить что ты не робот

Что означает `*` для __vfptr?

Да, я знаю * - указатель. Это не то, о чем я говорю. В одной из моих программ у меня был набор точек останова, и я заметил, что на авто была переменная __vfptr со значением 0x000007feed210a00.

Однако под типом, он просто сказал * и что он. Все остальные указатели в моей программе имели такие типы, как unsigned char* или some::namespace::Frame*, или int*. Это имеет смысл, поскольку указатель привязан непосредственно к определенному классу или типу данных. Но я понятия не имею, что * может быть, действительно ли существуют простые типы указателей?

EDIT: я использую Visual Studio 2010.

4b9b3361

Ответ 1

__vfptr содержит таблицу виртуальных методов и содержит информацию, которая позволяет динамическое связывание в наследованиях.

Информация в нем будет включать в себя такие вещи, как указатели функций, чтобы разрешить virtual functions и информацию о классе и его родителях.

Ответ 2

Ответ явно зависит от реализации и формально относится к вашему отладчику, а не к С++. На практике, однако, некоторый вариант _vptr является более или менее стандартным (в смысле обычного, а не в смысле определения формальным стандартом) именем для указателя на _vtable, который, в свою очередь, содержит все виды информации, необходимые для разрешения виртуальных функций и RTTI. Таким образом, _vptr является указателем на таблицу указателей, смещений и множество других вещей. Отладчик, вероятно, просто избегает необходимости присвоить этой цели имя или описать его структуру.