Pregunta

Si escribimos una función virtual, agrega una vtable en el objeto de esa clase. ¿Es cierto también para el destructor virtual? ¿Se utiliza vtable para implementar la virtualidad del destructor

¿Fue útil?

Solución

Sí Se necesita cierta información para permitir que se llame al destructor correcto cuando el objeto se elimina mediante un puntero de clase base. No importa si esa información es un índice entero pequeño o un puntero (aunque el enlace dinámico probablemente implica que es un puntero). Naturalmente, esa información debe estar adyacente (dentro) al objeto señalado.

Agregar un método virtual de cualquier tipo, incluido un destructor, a una clase que no tenía ninguno antes, aumentará sizeof (clase).

Otros consejos

No creo que el estándar C ++ requiera ningún mecanismo particular para producir el comportamiento correcto, pero sí, esa es una implementación típica. Una clase con al menos 1 función virtual tiene una tabla de punteros de función (virtual), siendo el destructor uno de ellos, si está marcado como virtual.

Sí lo es. Lo siento, no tengo una referencia definitiva para respaldar mi afirmación. Pero, ¿de qué otra forma obtendría un comportamiento diferente al usar solo un puntero al objeto?

Sí El destructor virtual es como cualquier otro método virtual. Se agregará la entrada de Vtable.

Se trata como cualquier otra función normal y se agregará a vtable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top