单例模式(饿汉式 懒汉式)

Posted zx-y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式(饿汉式 懒汉式)相关的知识,希望对你有一定的参考价值。

单例模式
单例模式:创建一个需要使用的对象。这里先分析为什么要用类来创建,本来可以创建一个non-local静态对象。就是在main函数之前创建 T a();这个对象。但是非局部静态对象一般由“模版隐式具体化”形成,在多个编译单元内,它的初始化顺序未知(effective c++ 4th)。所以用class方法的形式来构建一个单例模式。

首先单例模式分为饿汉式和懒汉式。
饿汉:很饿,很着急,需要尽早的构建对象。对象式提前构建好的。
懒汉:很懒,不着急,当对象需要用的时候,才构建对象。

1.饿汉式。

 1 class Singleton
 2     private:
 3         Singleton()
 4         Singleton(const Singleton & );
 5         Singleton& operator=(const Singleton& );
 6         static Singleton* ptr;
 7     public:
 8         Singleton* GetSingleton()
 9             return ptr;
10         
11         void deleteSingleton()
12             if(ptr!=nullptr)
13                 delete ptr;
14                 ptr=nullptr;
15             
16         
17 ;
18 Singleton* Singleton::ptr=new Singleton();

 

2.懒汉式

 1 /*
 2 class Uncopyable  
 3 protected:  
 4      Uncopyable()   
 5      ~Uncopyable()   
 6 private:  
 7      Uncopyable(const Uncopyable&);  
 8      Uncopyable& operator=(const Uncopyable&);  
 9 */
10 //lazy man 
11 class Singleton : private Uncopyable
12     private:
13         Singleton() pthread_mutex_init(mutex);
14         static Singleton* ptr;
15         static pthread_mutex_t mutex;
16 
17      public:
18         Singleton* GetSingleton()
19             if(ptr==nullptr)
20                 mutex.lock()
21                 if(ptr==nullptr)
22                     static Singleton single;
23                     return &single;
24                 
25                 mutex.unlock();
26             
27             return ptr;
28             
29 ;
30 Singleton* Singleton::ptr=nullptr;

 

以上是关于单例模式(饿汉式 懒汉式)的主要内容,如果未能解决你的问题,请参考以下文章

Java 设计模式 -- 单例模式的实现(饿汉式枚举饿汉式懒汉式双检锁懒汉式内部类懒汉式)jdk 中用到单例模式的场景DCL实现单例需用volatile 修饰静态变量

单例模式(饿汉式 懒汉式)

[设计模式]单例模式(懒汉式,饿汉式)

单例模式:饿汉式与懒汉式

单例模式——懒汉式饿汉式

单例模式(懒汉式单例饿汉式单例登记式单例)