ImGui manager singleton
Its not thread safe!

Looks like you can still create instances manually (though you would have to derive a class that can use the protected constructor) or copy the one created by getInstance().

Why not use the classic Singleton pattern?

class ImGUIManager
{
     public:
         static ImGUIManager&amp; getInstance()
         {
             static ImGUIManager instance;   // static member
                                             // Correctly constructed on first use.
                                             // Will be deleted on exit.
             return instance;
         }
         // PUT YOUR INTERFACE HERE

     private:
         ImGUIManager(){} // Make sure the constructor is private.
         // Delete the copy and move constructors.
         ImGUIManager(ImGUIManager const&amp;)            = delete;
         ImGUIManager&amp; operator=(ImGUIManager const&amp;) = delete;
         ImGUIManager(ImGUIManager&amp;&amp;)                 = delete;
         ImGUIManager&amp; operator=(ImGUIManager&amp;&amp;)      = delete;
};


Some References:

C++ Singleton design pattern