重複の可能性:
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 は、仮想機能のエントリです。
私の質問は、オフセット 0 に NULL のエントリがあるのはなぜですか、つまり、最初のエントリの目的は何ですか?
PS これはアラインメントに関連している可能性があると考えましたが、仮想関数を追加しましたが、RTTI エントリはまだオフセット 8 にありました。