As of now g_Profiler2 has static storage duration but can "only" be used between initialize() and shutdown(), that is basicly inside main(). Some member-functions ENSURE it was initialized.
This diff moves the object inside main(). initialize() and shutdown() are removed constructor and destructor handle everything.
g_Profiler2 is a pointer staticly initialized to nullptr and points to the object once and as long as it lives (= this in the constructor, = nullptr in the destructor).
g_Profiler2 is also removed the proviler is accessed through the singleton