1.定义:其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。
具体的例子:购物车;系统的日记输出;
2.实现:
(1)实现一:(只适应与单线程的环境)
class Singleton
{
public:
static Singleton *GetInstance()
{
if(instance==NULL)
{
instance=new Singleton;
return instance;
}
return instance;
}
static void DeleteInstance()
{
if(instance!=NULL)
{
delete instance;
instance=NULL;
}
}
private:
Singleton()
{
}
static Singleton *instance;
};
Singleton *Singleton::instance=NULL;
(2)实现二:在多线程的情况下,就可能创建多个Singleton实例
加上一个同步锁;
class Singleton
{
public:
static Singleton *GetInstance()
{
Lock();
if(instance==NULL)
{
instance=new Singleton;
return instance;
}
UnLock();
return instance;
}
static void DeleteInstance()
{
if(instance!=NULL)
{
delete instance;
instance=NULL;
}
}
private:
Singleton()
{
}
static Singleton *instance;
};
Singleton *Singleton::instance=NULL;
(3)实现三:
要实现的操作只是在实例没有创建之前需要进行加锁操作,以保证只有一个线程能够创建实例。
class Singleton
{
public:
static Singleton *GetInstance()
{
if(instance==NULL)
{
Lock();
if(instance==NULL)
{
instance=new Singleton;
}
UnLock();
}
return instance;
}
static void DeleteInstance()
{
if(instance==NULL)
{
delete instance;
instance=NULL;
}
}
private:
static Singleton *instance;
Singleton()
{
}
};
Singleton Singleton::instance=NULL;
(4)实现四:
实现像智能指针的行为,自动释放内存空间。
class Singleton
{
private:
Singleton()
{
}
class Test
{
public:
~Test()
{
if(instance!=0)
{
cout<<"the descontructor is running"<<endl;
delete instance;
instance=0;
}
}
};
static Test te;
static Singleton *instance;
public:
static Singleton *GetInstance()
{
return instance;
}
};
Singleton *Singleton::instance=new Singleton();
Singleton::Test Singleton::te;

本文深入探讨了单例模式的定义、实现方法及其优缺点,包括同步锁、智能指针等不同实现方式,旨在帮助开发者理解并正确使用单例模式。

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



