一、UML图

二、概念
单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。[DP]
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保护它的唯一实例。这个类可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法。
三、注意:
使用单例模式,只能保证一个线程内对象不会被多次创建,而不不能保证多线程的情况。因此,需要考虑多线程的话,就要用锁。
四、实现
(1)懒汉式单例(线程不安全)
class CSingleton
{
public:
static CSingleton* GetInstance()
{
if ( m_pInstance == NULL )
m_pInstance = new CSingleton();
return m_pInstance;
}
private:
CSingleton(){};
static CSingleton * m_pInstance;
};
(2)懒汉式单例(线程安全)
class Singleton
{
private:
static Singleton* m_instance;
Singleton(){}
public:
static Singleton* getInstance();
};
Singleton* Singleton::getInstance()
{
if(NULL == m_instance)
{
Lock();//借用其它类来实现,如boost
if(NULL == m_instance)
{
m_instance = new Singleton;
}
UnLock();
}
return m_instance;
}
(3)饿汉式单例
class CSingleton
{
private:
CSingleton()
{
}
public:
static CSingleton * GetInstance()
{
static CSingleton instance;
return &instance;
}
};
本文深入解析了单例模式的概念,探讨了如何通过类自身保护唯一实例,避免多实例化的问题。详细介绍了三种实现方式:懒汉式(线程不安全)、懒汉式(线程安全)和饿汉式,为读者提供了丰富的代码示例。
单例模式&spm=1001.2101.3001.5002&articleId=100576186&d=1&t=3&u=5dcdc5ac8a9646b9bac77773fa46147b)
2062

被折叠的 条评论
为什么被折叠?



