<< 12/25 >>
First Last

RTTI

解決: vtable の 0 要素目の一個後ろに std::type_info へのポインタがある

 C* c = new D();
 void** vtable = *(void***)c;
 std::type_info* ti = (std::type_info*)vtable[-1];
 printf("%d\n", &typeid(*c) == ti);  // 1
 printf("%d\n", &typeid(C) == ti);   // 0
 printf("%d\n", &typeid(D) == ti);   // 1

レイアウトについてもっと詳しく知りたければ g++ -fdump-class-hierarchy など