#ifndef MODULE_SINGLETON_BASE_H #define MODULE_SINGLETON_BASE_H #include template class singleton_base { public: static T *instance() { if(nullptr != _instance) { return _instance; } std::lock_guard ll(_mutex_singleton_base); if(nullptr == _instance) { _instance = new(std::nothrow) T(); } return _instance; } protected: //使继承者无法public构造函数和析构函数 singleton_base(){} //virtual ~singleton_base(){} private: //禁止拷贝构造和赋值运算符 singleton_base(const singleton_base&){} singleton_base &operator=(const singleton_base&){} //它的唯一工作就是在析构函数中析构Singleton的实例,所以private class Garbo { public: ~Garbo() { if (singleton_base::_instance) { delete singleton_base::_instance; singleton_base::_instance = nullptr; } } }; //定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数,我们不需要访问这个变量,所以不需要初始化 static Garbo garbo; static T *_instance; static std::mutex _mutex_singleton_base; }; template T *singleton_base::_instance = nullptr; template std::mutex singleton_base::_mutex_singleton_base; #endif // MODULE_SINGLETON_BASE_H