tabla de método virtual para herencia múltiple

Estoy leyendo este artículo "Tabla de métodos virtuales"

Ejemplo en el artículo anterior:

class B1 {
public:
  void f0() {}
  virtual void f1() {}
  int int_in_b1;
};

class B2 {
public:
  virtual void f2() {}
  int int_in_b2;
};

class D : public B1, public B2 {
public:
  void d() {}
  void f2() {}  // override B2::f2()
  int int_in_d;
};

B2 *b2 = new B2();
D  *d  = new D();

En el artículo, el autor introduce que la disposición de la memoria del objetod es así:

          d:
D* d-->      +0: pointer to virtual method table of D (for B1)
             +4: value of int_in_b1
B2* b2-->    +8: pointer to virtual method table of D (for B2)
             +12: value of int_in_b2
             +16: value of int_in_d

Total size: 20 Bytes.

virtual method table of D (for B1):
  +0: B1::f1()  // B1::f1() is not overridden

virtual method table of D (for B2):
  +0: D::f2()   // B2::f2() is overridden by D::f2()

La pregunta es sobred->f2(). La llamada ad->f2() pasa unB2 puntero como unthis puntero, así que tenemos que hacer algo como:

(*(*(d[+8]/*pointer to virtual method table of D (for B2)*/)[0]))(d+8) /* Call d->f2() */

¿Por qué deberíamos pasar unB2 puntero como elthis puntero no el originalD ¿¿¿puntero??? En realidad estamos llamando a D :: f2 (). Según mi entendimiento, deberíamos aprobar unD puntero comothis a la función D :: f2 ().

___actualizar____

Si pasa unB2 puntero comothis a D :: f2 (), ¿Qué pasa si queremos acceder a los miembros deB1 clase en D :: f2 () ?? Creo que elB2 El puntero (esto) se muestra así:

          d:
D* d-->      +0: pointer to virtual method table of D (for B1)
             +4: value of int_in_b1
B2* b2-->    +8: pointer to virtual method table of D (for B2)
             +12: value of int_in_b2
             +16: value of int_in_d

Ya tiene un cierto desplazamiento de la dirección inicial de este diseño de memoria contigua. Por ejemplo, queremos accederb1 dentro de D :: f2 (), supongo que en tiempo de ejecución, hará algo como:*(this+4) (this apunta a la misma dirección que b2) que apuntaríab2 enB????

Respuestas a la pregunta(2)

Su respuesta a la pregunta