Если оставить в стороне какую-то конкретную проблему с вашим текущим кодом, я думаю, что есть проблема с вашим дизайном.
У вас есть этот класс менеджера Singleton, который действует как своего рода пул, а также, как вы говорите, присваивает уникальные идентификаторы каждому объекту, чтобы их можно было найти позже. Но вы знаете, что позволяет коду находить объекты? Указатели! Если вы используете обычный пул, по одному для каждой иерархии типов (так что не используйте Boost Any), вы можете найти его таким же полезным, и он будет менее неприятным, если / else проверяет код проверки типа (что все согласны с тем, что это не очень хорошее применение RTTI, кроме плохой ООП).
Итак, что ты скажешь? Бросьте это, и используйте Boost Pool, если вы хотите что-то выделить ваши объекты из центрального места, и используйте указатели в качестве ваших уникальных идентификаторов, таким образом избегая поиска по пути.