仮想関数テーブル
オブジェクトのディスパッチテーブルはオブジェクトの動的に束縛されるメソッドのアドレスを保持する。メソッドの呼び出しは、メソッドのアドレスをオブジェクトのディスパッチテーブルから取り出すことにより行われる。ディスパッチテーブルは同じクラスに属するオブジェクトでは全て同一であり、通常オブジェクトから共有される。互換性のある型のオブジェクト(継承関係において兄弟のもの)は同じレイアウトのディスパッチテーブルを持ち、あるメソッドのアドレスは、全ての型互換のクラスの中で常に同じオフセットに現れる。それゆえ、メソッドのアドレスをディスパッチテーブルから取り出すことで、オブジェクトの実際のクラスに対応したメソッドが得られる。
(Ellis & Stroustrup 1990, pp. 227–232)
C++ の標準では、動的なディスパッチがどのように実装されるべきかについて規定していないが、一般的にコンパイラは若干の変更を加えて共通の基本的なモデルを用いる。
典型的には、コンパイラは個々のクラスごとに別の vtable を作成する。オブジェクトが生成される際、vtable へのポインタ(仮想テーブルポインタ, vpointer, vptr)がオブジェクトの不可視のメンバー(フィールド)として追加される(通常は最初のメンバーとなる)。コンパイラはコンストラクタ内に"隠れた"コードを生成し、クラスのオブジェクトの vpointer が、対応する vtable のアドレスで初期化されるようにする。