123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #ifndef MODULE_SINGLETON_BASE_H
- #define MODULE_SINGLETON_BASE_H
- #include<mutex>
- template<typename T>
- class singleton_base
- {
- public:
- static T *instance()
- {
- if(nullptr != _instance)
- {
- return _instance;
- }
- std::lock_guard<std::mutex> 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<typename T>
- T *singleton_base<T>::_instance = nullptr;
- template<typename T>
- std::mutex singleton_base<T>::_mutex_singleton_base;
- #endif // MODULE_SINGLETON_BASE_H
|