Указатель экземпляра отличается от vfptr при загрузке .dll

Итак, я поиграл с Visual Studio Test Suite и обнаружил кое-что интересное:

У меня есть экземпляр для класса А по адресу, скажем, 0x0656a64c,
Затем, когда я наблюдал за переменной, он говорит, что его __vfptr указывает на 0x077e7c0c,

Насколько я знаю, указатель виртуальной таблицы класса должен располагаться в первых 4 байтах (или 8 байтах в 64-битных приложениях) экземпляра класса, если только это не случай множественного наследования (тогда это просто смещения 1-го числа). адрес vtable).

Я заметил, что Visual Studio скомпилировал мой тест в .dll и динамически загружал свои инструменты для загрузки .dll.

Может ли это быть причиной различий в адресе?

Вот скриншот VS отладчика

Разница в адресах

1

Решение

Вы путаете адрес vptr и адрес, на который указывает vptr. Вы (примерно) правы, что обычная реализация состоит в том, что vptr является первым объектом в объекте, но Visual Studio показывает вам адрес виртуальные таблицы (который разделяется между всеми объектами класса).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]