La respuesta a esta pregunta depende de 2 escenarios:
- Escenario 1: cuando hay una función virtual en el programa: en este escenario, el compilador crea automáticamente una tabla virtual (conocida como V-Table ) y VVPTR (Virtual Void Pointer) . V-Table contiene las llamadas a métodos virtuales, mientras que VVPTR contiene la dirección de los métodos virtuales que están presentes en V-Table, por lo que VVPTR apunta a los métodos de V-Table.
El compilador toma los siguientes pasos para inicializar VVPTR:-
- Cuando el compilador recibe una indicación de que se utilizan funciones virtuales en el código, creará una tabla V y VVPTR.
- Ahora, para inicializar el compilador VVPTR, genere 7 líneas de código que deberían ejecutarse cada vez que el compilador sepa que la función virtual se va a utilizar
- Entonces, el compilador copiará estas 7 líneas de código dentro del constructor, de modo que justo después de la ejecución del objeto, VVPTR debería inicializarse para que pueda apuntar a V-Table.
- Ahora, si no se define explícitamente ningún constructor, entonces copiará estas 7 líneas de código dentro del constructor predeterminado (que el compilador creará por su cuenta).
- Ahora, llamará a los métodos virtuales.
Por lo tanto, esto deja en claro que el cuerpo de Default Constructor no está en blanco cuando el código contiene funciones virtuales.
- Escenario 2: cuando no hay una función virtual en el programa: en este escenario, el compilador no crea ninguna tabla V o VVPTR. Por lo tanto, el constructor predeterminado permanece vacío.
Conclusión: si el programa contiene funciones virtuales, entonces el cuerpo del constructor predeterminado no está en blanco y, de lo contrario, el cuerpo del constructor predeterminado está en blanco.
Publicación traducida automáticamente
Artículo escrito por AnshulVaidya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA