Возможный дубликат:
Понимание записей vtable
Использование g++ версии 4.6.3, 64-битная машина. Я знаю, что компилятор может свободно реализовывать виртуальные функции так, как он хочет. Я хочу знать, что здесь произошло.
Мои занятия:
#include <iostream>
class test
{
public:
virtual void func(){std::cout<<"in class test";}
};
int main()
{
test obj;
obj.func();
return 0;
}
Глядя на виртуальную таблицу, сгенерированную компилятором,
Vtable for test
test::_ZTV4test: 3u entries
0 (int (*)(...))0 (<---- what is this? )
8 (int (*)(...))(& _ZTI4test)
16 (int (*)(...))test::func
По смещению 8 это RTTI
По смещению 16 это запись для виртуальной функции.
Мой вопрос: почему есть запись для NULL по смещению 0 или, другими словами, какова цель первой записи?
P.S. Я думал, что это может быть связано с выравниванием, но затем я добавил больше виртуальных функций, но запись RTTI все еще была со смещением 8.