public class Singleton where T : class, new() { private static T m_Instance; public static T Instance { get { if (m_Instance == null) { m_Instance = new T(); } return m_Instance; } } ~Singleton() { m_Instance = null; } public static bool IsValid() { return m_Instance != null; } public static void Destroy() { m_Instance = null; } }