La herencia virtual se implementa de forma diferente según el compilador.
1) Sí, tanto vc como gcc usan el puntero vTable. Pero vc tiene otra referencia de puntero como puntero base virtual.
2) Para una herencia virtual clásica, como Left < Top; Derecha < Superior; < parte inferior izquierda y derecha La pila no debe ser así:
Left.vptr // -> to its vtable
Left::element_in_left
Right.vptr
Right::element_in_right
Bottom::element_in_bottom
Top::element_in_top
programas de uso VPTR encontrar vtable, por gcc, hay una base virtual valor de desplazamiento en viable. vptr + base offset dará la dirección principal.
3) No sé a qué se refiere. Hay diferentes maneras de implementarlo en compiladores de C++. Y otros lenguajes tienen sus formas de enlazar funciones.
Implementación definida. – ildjarn
Depende de la implementación, en términos técnicos estrictos es * No especificado *, el estándar de C++ solo describe el comportamiento que la herencia virtual tiene para ofrecer, pero no especifica cómo debe implementarse. Se omite como un detalle para las implementaciones y no son necesarios para especificar este detalle. Habiendo dicho que la mayoría (* leer todos los conocidos *) de los compiladores usan una tabla virtual y un mecanismo de puntero. –
Habiendo dicho lo anterior, no piense que la Q es irrelevante o no es una Q real en absoluto. Todos los compiladores utilizan un mecanismo similar y, aunque no es necesario conocer los detalles de implementación, no está de más saberlo. Además, esta Q se pregunta tantas veces que sería un buen C++ - faq si alguien toma el tiempo y responde convincentemente. –