1、基类A构造:虚表赋值,成员数据 2、基类B构造:虚表赋值,成员数据 3、派生类AB构造:虚表覆盖,成员数据 内存中结构如下图: 在做如下修改: classA {public: A() { m_nData=1; }virtualvoidfun() { }virtualvoidfun1()//新增加{ }intm_nData; };classB {public: B() { m_nData=2; }virtualvoi...
如果B,C不是虚继承,而是普通继承的话,那么A,B,C的大小都是8(没有指向虚基类的指针了),而D由于不是虚继承,因此包含两个A副本,大小为16. 注意此时虽然D的大小和虚继承一样,但是内存布局却不同。 然后,来看看VC的编译器 vc对虚表指针的处理比GCC复杂,它根据是否为虚继承来判断是否在继承关系中共享虚表指针,...
1、基类A构造:虚表赋值,成员数据 2、基类B构造:虚表赋值,成员数据 3、派生类AB构造:虚表覆盖,成员数据 内存中结构如下图: 在做如下修改: classA {public: A() { m_nData=1; }virtualvoidfun() { }virtualvoidfun1()//新增加{ }intm_nData; };classB {public: B() { m_nData=2; }virtualvoi...