来源自本人知乎回答
问题:
1.在一个虚继承的体系中,所有类都没有虚函数,那么这些类的对象模型中存不存在vptr?
2.在一个类的对象模型中,存在vptr的充要条件是什么?
3.A类的对象模型中有vptr__A,B类普通继承A类。B类需要满足什么条件,其对象模型中,除了含有vptr__A以外,还含有vptr__B?
4.A类的对象模型中有vptr__A,B类虚拟继承A类。B类需要满足什么条件,其对象模型中,除了含有vptr__A以外,还含有vptr__B?
回答:
最好明确一下,虚指针vptr指的什么,vptr常指的是vfptr,用于实现虚函数的功能,指向虚表,而还有一个vbptr,用于实现虚继承,指向一个偏移量表(vfptr与vbptr各占一个指针的内存,至少MSVC是这样的)。
正面回答一下
1,对大部分编译器,不存在vfptr,对于MSVC,存在vbptr
alignment member是内存对齐,面试又一个考点来了
2,对MSVC,存在虚函数则存在vfptr,存在虚继承则存在vbptr
3,恐怕派生类对象不会多出一个额外虚指针
4,对于MSVC,B对象既有vbptr,也有vfptr