2009-06-16 13 views
7

Si definimos una clase abstracta que tiene un destructor virtual puro, ¿por qué tenemos que dar una definición de un destructor en la clase abstracta?Pregunta sobre el destructor virtual puro

+0

Duplicar http://stackoverflow.com/questions/630950/pure-virtual-destructor-in-c – ralphtheninja

Respuesta

15

El destructor de la clase base debe invocarse cuando se destruye el objeto, por lo que necesita una definición.

9

Como señaló Jesse, los destructores heredados siempre reciben una llamada (el compilador los llama por ellos sin posibilidad de anular este comportamiento), por lo que es lógico que un destructor virtual deba tener una implementación. Entonces, si un destructor virtual puro debe tener una implementación, ¿cuál es la diferencia entre un destructor virtual puro y un destructor virtual normal? Si su clase abstracta tiene solo el destructor virtual declarado y ningún otro método virtual puro, hacer que el destructor sea puro evitará que alguien pueda crear una instancia de la clase abstracta.

3

Solo un dtor virtual se puede declarar puro. Pero luego, como usted agrega una declaración, debe implementar el cuerpo del dtor. Como ya se mencionó, los destructores llaman a su padre dtor, todo hasta la cadena de herencia.

9

Debido a que la norma dice así:

12.4.7 Un destructor se puede declarar virtual (10.3) o virtual pura (10,4); si se crean en el programa objetos de esa clase o cualquier clase derivada, se definirá el destructor.

La razón de esto es que se llama explícitamente cuando se destruye un objeto de una clase derivada.

consulta las respuestas a mi pregunta anterior: Under what circumstances is it advantageous to give an implementation of a pure virtual function?

+0

¿Qué pasa con esta respuesta? O SO para ese asunto? – Tobias

+1

No es correcto decir que se llama "explícitamente". Fue útil que haya hecho referencia al estándar, pero debe editar su respuesta para que sea más formalmente correcta. "explícitamente" es lo opuesto a cómo se llama normalmente a los destructores. – nobar

Cuestiones relacionadas