参考:https://blog.csdn.net/qq_28114615/article/details/88077009
针对牛客网按知识分类中C++题第158个
1.每一个 class 产生出一堆指向 virtual functions 的指针,放在表格之中,这个表格被称为 virtual table(vtbl)。
2,。每一个 class object 被添加了一个指针,指向相关的 virtual table 。通常这个指针被称为 vptr,在32位系统中占4个字节。64位占8个字节。vptr 的设定(setting)和重置(resetting)都由每一个 class 的constructor、destructor 和 copy assignment 运算符自动完成,每一个 class 所关联的 type_info object (用以支持 runtime type identigication,RTTI)也经由 virtual table 被指出来,通常是放在表格的第一个 slot 处。
从以上信息,我的认识时,一个 class 如果有 virtual function,那么它就会把自己的 virtual function 信息”上交“给 virtual table(vtbl)。如果其他 class 比如 class A 继承它,或者拷贝构造它,那么这个 virtual table 就会被share,A 就会得到该 virtual table 的 vptr,并且如果 A 自己有virtual function,也会产生新的 virtual function 指针放入 vptr 所指的virtual table 之中。然后这个 virtual table 会放在class A 的地址的首部。