要点

  1. 当一个类有多个父类时,每个父类在内存中依次排列,然后该类自己的成员。
  2. 每一个父类的镜像中,都包含有独立的虚函数表
  3. 当把子类的指针Upcast的时候,两种Upcast的方式得到的结果分别指向各自的父类镜像
  4. 当两个父类重载的虚函数不同时,会使用Thunk机制,也就是说,虚函数表中的函数指针并不指向实际的虚函数,而是指向一小段代码。在这一小段代码中,会修改This指针(ECX寄存器),使之指向合适的父类镜像,然后再跳转到实际的虚函数体。
  5. 当不使用虚继承时,共同基类的成员对象,在子类中会有独立两分(从两个父类各自继承了一份)。
  6. 当使用虚继承时,共同基类的成员对象也会在虚函数表中记录,访问它必须先查找虚函数表。

为什么不建议使用多重继承?

  1. 可能会引入菱形继承,而为了解决这种问题,有需要引入虚拟继承,而虚拟继承实现复杂,占用更多的内存,且效率低

留言

2016-10-17