¿Cómo sobrecargo un destructor?Cómo sobrecargar un destructor?
Respuesta
No puede. Solo hay un destructor por clase en C++.
Lo que puedes hacer es crear un destructor privado y luego tener varios métodos públicos que llaman al destructor de formas nuevas e interesantes.
class Foo {
~Foo() { ... }
public:
DestroyFoo(int) { ... };
DestroyFoo(std::string) { ... }
};
¿Eso no mataría RAII? – Qberticus
@Qberticus, sí lo haría de alguna manera. Todavía no hay nada que impida que el OP cree una clase adicional que tiene RAII simple y destruye a Foo de una manera interesante.Sin más información del OP, no puedo decirlo. Espero que OP lo haya considerado y lo tenga en cuenta en su solución. – JaredPar
Um eso es privado * destructor * ... –
¡No puede! Cada clase solo puede tener un destructor. ¿Cómo puedes tener más de uno? El destructor se dispara automáticamente; no hay forma de que el lenguaje sepa a cuál llamar.
Los destructores virtuales, sin embargo, son otra cuestión.
No es así. No puedes tener 2 destructores en una clase.
¿Qué estás tratando de lograr?
Sobrecarga significa tener varias funciones con el mismo nombre que toman diferentes argumentos. Como swap(int &a, int &b)
y swap(double &a, double &b)
. Un destructor no toma argumentos. Sobrecargarlo no tendría sentido.
Si tiene que hacer cosas diferentes al destruir un objeto dependiendo de ciertas circunstancias, entonces solo necesita los enunciados if correspondientes en su destructor para verificar esas circunstancias.
Interesante pregunta pero la única razón por la que querría sobrecargar un destructor sería porque desea liberar algún recurso en un destructor y dejarlo en otro, ¿no?
Básicamente, puede lograr dicho comportamiento desde su propio destructor utilizando un valor booleano adicional que le dirá si un recurso específico debe liberarse o no. Este booleano se establecerá en tu constructor y/o uno de tus otros métodos y en tu destructor verificas si está configurado. Si no está configurado, entonces liberarías el recurso. De lo contrario, simplemente deja el recurso y probablemente alguna otra tarea lo liberará. (Esto tendría sentido cuando compartas recursos entre varios objetos).
La razón por la que no puedes sobrecargar un destructor es porque tu código no tiene ni idea de a qué destructor necesita llamar cuando destruyes un objeto . ¡A menos que llames mal a los destructores, pero luego te estás comportando mal! ;-)
No sobrecargue el destructor porque nunca lo llama. Esa es su esencia básica. (De lo que pasamos en clase.)
- 1. C# - ¿Cómo puedo "sobrecargar" a un delegado?
- 2. Escribiendo un destructor LinkedList?
- 3. ¿Cómo puedo sobrecargar los operadores []?
- 4. Cómo sobrecargar el operador -> *?
- 5. sobrecargar elección
- 6. ¿Cuándo debería crear un destructor?
- 7. ¿Cómo puedo llamar a un destructor privado desde un shared_ptr?
- 8. destructor estático
- 9. Destructor privado
- 10. Destructor crash
- 11. Callling object constructor/destructor con un asignador personalizado
- 12. es posible sobrecargar un método final
- 13. Cómo sobrecargar operador ==() para un puntero a la clase?
- 14. ¿Cómo sobrecargar el constructor de un objeto en JS (Javascript)?
- 15. ¿Cómo sobrecargar correctamente el operador << para un ostream?
- 16. destructor estática
- 17. Mejores prácticas con respecto a iguales: ¿sobrecargar o no sobrecargar?
- 18. ¿Cómo sobrecargar el operador [] en C#
- 19. ¿Cómo sobrecargar el operador de indirección? (C++)
- 20. Cómo sobrecargar el método __bool__ de Python?
- 21. Cómo detectar el desenrollado de la pila en un Destructor
- 22. ¿Cómo escribir un destructor de clase en Scala?
- 23. defecto destructor virtual puro
- 24. ¿Cuándo se llama un destructor de C++?
- 25. ¿Tiene una clase VB6 un destructor?
- 26. ¿Debería cada clase tener un destructor virtual?
- 27. GCC comportamiento destructor
- 28. Stopping destructor se llama
- 29. Cómo llamar al destructor en C# XNA
- 30. ¿Puedo sobrecargar paréntesis en Scala?
Como no puedes, ¿tenías alguna idea de cómo usar un destructor sobrecargado o solo sentías curiosidad? Si quieres hacer algo más que crear dos destructores para una clase, críalo y podremos discutir cómo lograrlo. –
Me pregunto si fue posible, ¿cómo esperas que se comporte? –
Fue una pregunta planteada por otra persona. Querían ver qué tan rápido respondería SO. – Joshua