Now I am trying to be a good programmer and keep track of my pointers. So I decided that I should replace the pointer with a shared_ptr.
In regards to the validity of calling get() on an unassigned shared_ptr I thought that if a shared_ptr was declared in the header and no call is given to any constructor that the default constructor would be used. Therefore the shared_ptr would have a value of 0x0.
It would, and you shouldn't get the message. Perhaps the message comes from the copy assignment (which again, it shouldn't) - try m_instance.reset(new Trace_State()); instead. You could also simply write if (!m_instance) as shared_ptr declares operator ! just for this purpose. But I agree, in a singleton pattern you benefit from shared pointer only if the singleton lives shorter than the application and you want to make sure it's not gone while still in use. Leon