Debido a los conocidos problemas con llamar a métodos virtuales desde dentro de constructores y destructores, comúnmente termino con clases que necesitan un método de configuración final para ser llamado justo después de su constructor, y un método de predescompresión para ser llamado solo antes de su destructor, así:¿Existe alguna forma automática de implementar llamadas a métodos virtuales posteriores al constructor y predestructor?
MyObject * obj = new MyObject;
obj->Initialize(); // virtual method call, required after ctor for (obj) to run properly
[...]
obj->AboutToDelete(); // virtual method call, required before dtor for (obj) to clean up properly
delete obj;
esto funciona, pero lleva consigo el riesgo de que la persona que llama se olvide de llamar a uno o ambos de estos métodos en los momentos adecuados.
Entonces, la pregunta es: ¿hay alguna forma en C++ para llamar esos métodos automáticamente, para que la persona que llama no tenga que recordar llamarlos? (Supongo que no, pero pensé en preguntar de todos modos en caso de que haya alguna manera inteligente de hacerlo)
¿Qué problema tienes con los destructores? – peterchen
Quizás deba describir su problema real, tal vez en realidad no * necesita * estas llamadas ... – peterchen
si "comúnmente" necesita llamar a métodos virtuales desde controladores o dtors, parece que tiene un problema de diseño importante. ¿Puedes dar un ejemplo de una clase donde esto es necesario? Lo más probable es que haya una solución más simple. (Como de costumbre, esperaría que RAII solucione el problema. Delegue el problema en una o más variables miembro, con sus propios ctors/dtors cada uno haciendo su parte de inicialización/desmontaje. – jalf