虚函数内存模型

    xiaoxiao2021-03-25  127

    // 理解虚函数在内存中的实现 #include class Base { public: Base() {printf("Base\n");} virtual ~Base() {printf("~Base\n");} public: virtual void f() {printf("Base:f\n");} virtual void g() {printf("Base:g\n");} int m_nBase; }; class Derive : public Base { public: Derive() {printf("Derive\n");} ~Derive() {printf("~Derive\n");} public: void f() {printf("Derive:f\n");} void g() {printf("Derive:g\n");} int m_nDerive; }; typedef void (*FUN)(void); int main() { Base* pB = new Base; Base* pD = new Derive; int nB = sizeof(Base); int nD = sizeof(Derive); pB->f(); pD->f(); pB->g(); pD->g(); // 获取虚函数表的地址 int* pBvftab = (int*)*(int*)pB; // 0为析构函数,1为f(),2为g() FUN fBF = (FUN)*(pBvftab + 1); fBF(); FUN fBG = (FUN)*(pBvftab + 2); fBG(); int* pDvftab = (int*)*(int*)pD; FUN fDF = (FUN)*(pDvftab + 1); fDF(); FUN fDG = (FUN)*(pDvftab + 2); fDG(); delete pB; delete pD; return 0; }

    虚函数表指针在内存中的最前面

    运行结果图:

    ithewei 认证博客专家 c/c Qt libhv 编程之路,其路漫漫,吾将上下而求索https://github.com/itheweihttps://hewei.blog.csdn.net
    转载请注明原文地址: https://ju.6miu.com/read-22172.html

    最新回复(0)