C代码模拟实现C++的虚拟表

    技术2025-11-09  13

    C++的类成员如果有Virtual修饰符,则在实例化后的对象中会形成一个叫做VTBL(虚拟表)的东西,另外借助C++内在的滞后绑定功能实现所谓的多态性。下面,我借助C代码来大概演示下VTBL的实现原理,仅供参考。

     

     

    //模拟VTBL,实际为一套函数集合 Struct SampleVtbl { void func() {} } //模拟带Virtual成员的类 Struct SampleClass { SampleVtbl *pVtbl; } //分配内存空间,在尾部预留空间为VTBL使用 void init(SampleClass* pObject) { pObject = (SampleClass *)malloc(sizeof(SampleClass) + sizeof(SampleVtbl)); pObject->pVtbl = (SampleVtbl *)(pObject + 1); } void TestSample() { SampleBase *obj; init(obj); (*(SampleVtbl **)obj)->func(); free(obj); }

    最新回复(0)