#ifndef TEMPLATE_SINGLETON_H #define TEMPLATE_SINGLETON_H #include // 定义单例(声明友元) #define SINGLETON_DEFINE(Class, ...) \ friend TemplateSingleton; // 创建单例(不存在创建,存在获取本类唯一单例) #define SINGLETON_CREATE(Class, ...) \ TemplateSingleton::CreateInstance // 销毁单例 #define SINGLETON_DELETE(Class, ...) \ TemplateSingleton::DeleteInstance template class TemplateSingleton { public: static Class* CreateInstance(Args ...args); static void DeleteInstance(); private: static Class* s_pObject; static std::mutex s_mutex; }; template Class* TemplateSingleton::CreateInstance(Args ...args) { if (s_pObject == nullptr) { std::lock_guard unique(s_mutex); if (s_pObject == nullptr) { s_pObject = new Class(args...); } } return s_pObject; } template void TemplateSingleton::DeleteInstance() { if (s_pObject != nullptr) { std::lock_guard unique(s_mutex); if (s_pObject != nullptr) { delete s_pObject; s_pObject = nullptr; } } } template Class* TemplateSingleton::s_pObject = nullptr; template std::mutex TemplateSingleton::s_mutex; #endif //TEMPLATE_SINGLETON_H