我们知道,一个C++类如果带有virtual关键字的函数,那么,它就是一个虚类。虚类都有虚函数表。这个虚函数表真的存在吗?能摸得着、看得见吗?
的确是可以的。下面我们就展示一下如何看到C++类的虚函数表。请注意,我使用的系统是Ubutu 10.04, g++ 4.6.3。
下面我们先定义一个简单的纯虚类和它的实现类:
class BaseClassNoDeconstructor {
public:
virtual void func() = 0;
};
class VirtualClassNoDeconstructor : public BaseClassNoDeconstructor{
public:
virtual void func() {
cout << "VirtualClassNoDeconstructor func\n";
}
};
然后,针对类VirtualClassNoDeconstructor,我们定义两个等价的struct:
struct VirtualClassNoDeconstructorMember;
struct VirtualClassNoDeconstructorVTable {
void (*func)(VirtualClassNoDeconstructorMember*);
};
struct VirtualClassNoDeconstructorMember {
VirtualClassNoDeconstructorVTable * vtable;
};
然后,我们用VirtualClassNoDeconst