有些时候我们的需求中会有固定数量的类的要求(比如数据库连接池,线程池等)。我们可以分配的资源是有限的,所以我们需要有有限个资源存在并进行管理。此时,单例模式出现。
单例类定义的时候就进行了实例化,就是提前准备下一次的饭菜。
- class singleton {
- private:
- singleton() {}
- static singleton *p;
- public:
- static singleton *instance();
- };
-
- singleton *singleton::p = new singleton();
- singleton* singleton::instance() {
- return p;
- }
第一次用到类实例的时候才会去实例化,就是饿了才知道找饭吃
- class singleton {
- private:
- singleton() {}
- static singleton *p;
- public:
- static singleton *instance();
- };
-
- singleton *singleton::p = nullptr;
-
- singleton* singleton::instance() {
- if (p == nullptr)
- p = new singleton();
- return p;
- }
(一).加锁、
- class singleton {
- private:
- singleton() {}
- static singleton *p;
- static mutex lock_;
- public:
- static singleton *instance();
- };
-
- singleton *singleton::p = nullptr;
-
- singleton* singleton::instance() {
- lock_guard
guard(lock_) ; - if (p == nullptr)
- p = new singleton();
- return p;
- }