Estoy trabajando en una aplicación de C++ que internamente tiene algunos objetos de controlador que se crean y destruyen regularmente (utilizando los nuevos). Es necesario que estos controladores se registren a sí mismos con otro objeto (llamémoslo controllerSupervisor), y que se anulen del registro cuando se destruyan.Obligando a destruir algo pasado en C++
El problema que estoy enfrentando ahora ocurre cuando salgo de la aplicación: como el orden de destrucción no es determinista, sucede que la única instancia del controladorSupervisor se destruye antes de (algunos) de los controladores, y cuando llaman el método de anulación de registro en su destructor, lo hacen sobre un objeto ya destruido.
La única idea que se me ocurrió hasta ahora (tener un resfriado grande, por lo que esto no significa mucho) no es tener el controllerSupervisor como una variable global en la pila, sino en el montón (es decir, usar new). Sin embargo, en ese caso, no tengo un lugar para eliminarlo (todo esto está en un tipo de biblioteca de terceros).
Se apreciarán todos los consejos/sugerencias sobre las posibles opciones.
por "tipo de biblioteca de terceros" ¿quieres decir que no escribes "main"? –
Significa que el código para el controlador y el supervisor se encuentra en una biblioteca enlazada estáticamente. El supervisor no está visible fuera de esta lib, pero la aplicación crea los controladores. – Steven
Si crea los controladores, entonces puede controlar su destrucción, ¿o no? – Null303