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
Respuesta
El destructor de la clase base debe invocarse cuando se destruye el objeto, por lo que necesita una definición.
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.
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.
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?
¿Qué pasa con esta respuesta? O SO para ese asunto? – Tobias
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
- 1. defecto destructor virtual puro
- 2. ¿Debería un destructor de clase abstracta ser puro virtual?
- 3. método virtual puro Llamado
- 4. Cómo resolver "método virtual puro llamado"
- 5. C++, base virtual abstracta protegida virtual virtual privado destructor
- 6. Destructor virtual para boost: clases no procesables?
- 7. C++: operador de asignación virtual puro
- 8. desctructor puro virtual en la clase base abstracta
- 9. Pregunta sobre el método
- 10. Clase derivada con destructor no virtual
- 11. ¿Debería cada clase tener un destructor virtual?
- 12. ¿Debo llamar explícitamente al destructor virtual base?
- 13. Pregunta sobre el CNAME para diferentes dominios
- 14. Pregunta sobre los métodos [Puros]
- 15. ¿Por qué el destructor de QWidget no es virtual?
- 16. ¿Por qué el destructor de `boost :: multi_array_ref` no es virtual?
- 17. Buena práctica: Argumentos predeterminados para el método virtual puro
- 18. ¿Se puede generar el destructor predeterminado como un destructor virtual automáticamente?
- 19. Pregunta sobre el "&" en el maravilloso
- 20. Pregunta sobre Cyclone
- 21. pregunta general sobre Ruby
- 22. Pregunta sobre Environment.ProcessorCount
- 23. Pregunta sobre round_up macro
- 24. Pregunta sobre boost :: swap
- 25. Pregunta sobre C# covarianza
- 26. Pregunta sobre eventos personalizados
- 27. ¿Por qué enable_shared_from_this tiene un destructor no virtual?
- 28. Java Pregunta sobre Static
- 29. Pregunta sobre el patrón de la torta
- 30. Pregunta sobre el texto después del iframe
Duplicar http://stackoverflow.com/questions/630950/pure-virtual-destructor-in-c – ralphtheninja