Qubc
@Qubc
Ненавижу полисемию.

Как работает (примерно) отображение таблицы виртуальных функций в отладчике msvc?

Отладчик показывает содержимое массивов если знает размер массива и показывает только первый элемент массива если речь идёт об указателе на первый элемент массива.
Стало интересно, как он показывает таблицу виртуальных функций, если внутри объекта хранится указатель void ** ? Или это бессмысленный вопрос, потому что это зависит от реализации?

63ee4eb454441722861448.png

Попытался сделать как я себе это представляю, но получается не то.
#include <iostream>

class Base;

extern void (Base::* table [ 2 ])();

class Base {
public:
    void (Base::* (* ptable) [2]) ();
    
    Base () : ptable{&table} {    }

    void nvtest(){}

    virtual void vtest () {}
    virtual ~Base () {}
};

void (Base::* table [ 2 ])() = { &Base::nvtest , &Base::vtest };

int main () {
    int example [ 3 ] = { 1,2,3 };
    int* p = example;
    int ( *pe ) [ 3 ] = &example;

    Base b;
    return 0;
}
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы