МануалМап заставит тебя вручную вызывать деструктор этого класса при анлоаде, поскольку тебе в любом случае придется делать объект этого класса глобальным, чтобы иметь возможность им пользоваться отовсюду. Что мешает тебе так же вручную вызвать деструктор для мапы? Делать этот же объект локальным нету абсолютно смысла, ибо жить он должен во всех потоках игры, где он может использоваться хотя бы гипотетически.
Деструктор std::optional вызывается тогда же, когда и все остальные деструкторы, потому что это обычный объект. Не понимаю, о чем ты говоришь.
Отправлять объект в динамическую память или использовать Singleton - не лучший вариант. В первом случае тебе все еще нужно будет самому контролировать удаление объекта(Даже если он будет внутри std::unique_ptr, поскольку для него деструктор тоже не вызовется), а во втором случае у тебя и вовсе не будет контроля над тем, когда объект удаляется. Палка о двух концах
Так в данном случае я и принимаю критику. То, что я не проследил за инициализацией/выгрузкой имгуя - определенно мой косяк, доберусь до компа - поправлю(либо можете залить Pull Request на гитхаб). Да и сейчас я так же пытаюсь понять, чем в этом случае класс будет лучше пространства имен, но я попросту не вижу логики, так и так получится глобальный объект(максимум - с ограниченной областью видимости), который не будет вызывать свой деструктор во время выгрузке при инжекте через ManualMap