|
|
Como
norma general, el constructor de la clase base
se llama antes que el constructor de la clase derivada.
Con los destructores, sin embargo, sucede al
revés: el destructor de la clase derivada se llama
antes que el de la clase base.
Por
esa razón, en el caso de que se borre, aplicando delete,
un puntero a un objeto de la clase base que apunte
a un objeto de una clase derivada, se llamará
al destructor de la clase base, en vez de al destructor
de la clase derivada, que sería lo adecuado. La solución
a este problema consiste en declarar como virtual el destructor
de la clase base. Esto hace que automáticamente los
destructores de las clases derivadas sean también virtuales,
a pesar de tener nombres distintos.
De
este modo, al aplicar delete a un puntero de
la clase base que puede apuntar a un objeto de ese tipo
o a cualquier objeto de una clase derivada, se aplica el
destructor adecuado en cada caso. Por esta razón
es conveniente declarar un destructor virtual en todas las
clases abstractas, ya que aunque no sea necesario para esa
clase, sí puede serlo para una clase que derive de ella.
Este
problema no se presenta con los constructores y por
eso no existe ningún tipo de constructor virtual o similar.
|
|