虚函数表

一个指针数组,该指针指向相应的虚函数(non-static member function)

原理

  1. class(满足相应条件)有唯一一个虚函数表(vtbl)

  2. 每个class对象,内部含有一个隐藏数据成员(vptr),指向该class的虚函数表

  3. 当调用虚函数时,根据该虚函数的索引(在class virtual中声明的顺序),通过vptr查vtbl,间接调用

    pC1->f1() => *(pC1->vptr[i])(pC1);
    

什么样的class有虚函数表?

  1. 定义了虚函数

  2. 从有虚函数派生的类

参考

  1. More Effective C++ Item24

留言

2016-10-17