单例模式(饿汉式 懒汉式)
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 修饰静态变量