自己对C++虚继承内存对象模型探讨

来源:互联网 发布:sqlserver 日期格式化 编辑:程序博客网 时间:2024/05/17 15:19

本人总结也就是看别人的博客进行总结的,因为我转载的上篇,但是上篇有点错误,所以本人将自己的实践补充下来。

看实例:

class A {

int a;

virtual ~A(){}

};//此时A的大小就是为sizeof(a)+sizeof(ptr) = 8

class B:virtual public A{

virtual ~B(){}

virtual void myfunB(){}

};//此时B是虚继承有点特别,特别就是有无virtual void myfunB(){},如果有的话那表示大小就是sizeof(a)+sizeof(ptr_A虚继承的指针)+sizeof(ptr从A继承来的指针) + sizeof(自身的ptr指针)也就是16.而如果没有的话那表示sizeof(自身ptr指针)= 0,所以总大小也就是12.其中有一点就是有无虚函数析构函数不影响,也就是说有无virtual ~B(){}大小无影响。

class C:virtual public A{

virtual ~C(){}

virtual void myfunC(){}

};//同C

class D:public B,public C{

virtual ~D(){}

virtual void myfunD(){}

};//D此时因为不是虚继承所以大小将为sizeof(a)+sizeof(B中虚继承的指针大小)+虚基类指针B+sizeof(C中虚继承的指针大小)+虚基类指针C

这里没有自身的指针,因为不是虚继承