发布新日志

  • 转载 -- C++中实现多态性以及动态调用分发的过程

    2008-11-18 12:28:12

    虚函数的运行时实现采用了VPTR/VTBL的形式,这项技术的基础:
    ①编译器在后台为每个包含虚函数的类产生一个静态函数指针数组(虚函
    数表),在这个类或者它的基类中定义的每一个虚函数都有一个相应的函数指针。
    ②每个包含虚函数的类的每一个实例包含一个不可见的数据成员vptr(
    虚函数指针),这个指针被构造函数自动初始化,指向类的vtbl(虚函数表)
    ③当客户调用虚函数的时候,编译器产生代码反指向到vptr,索引到vtbl中,然后在指定的位置上找到函数指针,并发出调用。

    vbtl的布局结构因为基础技术的不同而不同,但不会影响到程序员必须要编写的C++源代码
    ①cfront技术
    ②adjustor thunk技术

Open Toolbar