读书人

还是有关VC++虚函数表的有关问题~

发布时间: 2012-03-22 17:43:57 作者: rapoo

还是有关VC++虚函数表的问题~~

C/C++ code
#include<iostream>using namespace std;class Base{public:    void virtual func1()    {        cout<<"Base function1"<<endl;    }    void virtual func2()    {        cout<<"Base function2"<<endl;    }};class Derive:public Base{public:    void virtual func1()    {        cout<<"Derive function1"<<endl;    }};int main(){    Base *pObj;    pObj=new Derive();        return 0;}


调试,从 局部变量 窗口可以看到。这里的 pObj指向了一个 Derive对象和一个__vfptr(虚函数表),但是这个Derive对象里面的Base部分包含了一个跟__vfptr一摸一样的虚函数表。
请问为什么 pObj指向的内存存储了两份一样的 虚函数表??

[解决办法]
探讨
引用:
个人理解:虚表是维护虚函数调用的,编译器遇到带有visual关键字的时候,会去虚表查找对应的函数,

呃~~~但是没有对上我的问题~

[解决办法]
呵呵,你是通过VC看的吧,其实那并不是通一个表,你可以看看,它们指向地地址是不同的,
子类的地址是包含了父类地址的(前提是子类实现了自己的虚函数),
它们有一个公共的部分。

[解决办法]
探讨
引用:
请问为什么 pObj指向的内存存储了两份一样的 虚函数表??
pObj指向的内存只存储了一个虚拟指针,没有虚函数表.


呃。。。自己打了自己的嘴巴了。。应该是有两个指针 指向了同一个虚函数表~

[解决办法]
你同时计算下两个类的大小,你会发现它们各包含自己的虚函数表,2个并不奇怪

读书人网 >VC/MFC

热点推荐