用C++实现单件模式,即设计一个类,该类仅允许被实例化一次。并举例说明单件模式的应用领域。
发布网友
发布时间:2022-06-28 08:14
我来回答
共1个回答
热心网友
时间:2023-10-31 00:01
C++单例模式也称为单件模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等。
单例模式有许多种实现方法,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有静态方法获取该实例。
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* Instance();
void SetValue(int value);
int GetValue();
private:
int* pVal_;
private:
Singleton();
~Singleton();
static Singleton* s_pInstance_;
};
Singleton* Singleton::Instance()
{
if(NULL == s_pInstance_)
s_pInstance_ = new Singleton;
return s_pInstance_;
}
void Singleton::SetValue( int value )
{
if(NULL == pVal_)
pVal_ = new int;
*pVal_ = value;
}
int Singleton::GetValue()
{
if(NULL == pVal_)
return 0;
return *pVal_;
}
Singleton::Singleton():pVal_(NULL)
{
}
Singleton::~Singleton()
{
if(NULL != pVal_)
delete pVal_;
}
Singleton* Singleton::s_pInstance_ = NULL;
int main(int argc, char* argv[])
{
Singleton* s = Singleton::Instance();
s->SetValue(10);
cout << s->GetValue() << endl;
return 0;
}
你可以在另外的类方法或者线程函数中直接使用Singleton类的公有方法Instance()得到单实例对象指针,可以看到这个指针值是一样的,这也就反映了单实例类的特性。
另外,以上的示例只有对单例类的实例化构造,但没有释放。不过这可以使用其他方式保证,如利用系统对静态对象的销毁机制实现一个守卫类,在守卫类的析构函数中进行单例类的释放。