虚拟继承下的Vptr指针?
有一个派生情况是这样的:
point
point3d vertex
vertex3d
pvertex
(由于关系线画不出来,只能这样)
point是个虚拟基类。被ponit3d和vertex虚拟继承,vertex3d又多重继承了ponit3d和vertex,pvertex再单一继承vertex3d
按照我的看法是:
如果生成一个pvertex对象,那这个对象的布局应该是这样的:
point3d_subobject
point3d_vptr
vertex_subobject
vertex_3d_datamember
pvertex_subobject
pvertex_subobject
point_subobject
point_vptr
我自己感觉的对象布局应该是这样吧。point3d和vertex各自维护自己的一个vptr指针。虚拟基类自己维护一个vptr指针。因为pvertex是单一继承vertex3d,所以没有再增加一个vptr指针。如果我的理解正确的话。
那在《深度探索C++对象模型》里的P217页“vptr初始化语意学",pvertex的constructor扩充了一个对pvertex的VPTR指针的初始化"this->_vptr_pvertex=_vtbl_PVertex;"那这么说在pvertex的subobject里还有一个vptr指针了??
有哪位对此熟悉的请指教。谢谢!!