programacion - En C++, ¿casi siempre uso la herencia virtual?
polimorfismo en c++ (2)
En mi experiencia, la herencia virtual (a diferencia de los métodos virtuales ) casi nunca es necesaria. En C ++ se usa para tratar el "problema de la herencia de diamante" , que si evita la herencia múltiple no puede suceder.
Estoy bastante seguro de que nunca he encontrado herencia virtual fuera de los libros de C ++, que incluye tanto el código que escribo como el millón de sistemas de líneas que mantengo.
Veo en esta entrada que la herencia virtual agrega sizeof (puntero) a la huella de memoria de un objeto. Aparte de eso, ¿hay algún inconveniente para mí al usar la herencia virtual de forma predeterminada y la herencia convencional solo cuando sea necesario? Parece que llevaría a un diseño de clase más a prueba de futuro, pero tal vez me esté perdiendo algún escollo.
Los inconvenientes son que
- Todas las clases deberán inicializar todas sus bases virtuales todo el tiempo (por ejemplo, si A es la base virtual de B y C deriva de B, también debe inicializar A).
-
dynamic_cast
usar elstatic_cast
más costoso en todos losdynamic_cast
donde use unstatic_cast
(puede o no ser el problema, según su sistema y si su diseño lo requiere).
El punto 1 solo no hace que valga la pena, ya que no puedes ocultar tus bases virtuales. Casi siempre hay una manera mejor.