顾名思义,一个进程只允许有一个实例,禁止类外创建实例,只能通过静态的GetInstance
方法获取实例。
比较简单,不多说了。
#include <iostream>
using namespace std;
// 懒汉式单例模式
class Singleton
{
private:
Singleton() { }
static Singleton* pInstance;
public:
static Singleton* GetInstance()
{
if (pInstance == nullptr)
pInstance = new Singleton();
return pInstance;
}
void Display()
{
cout<<__PRETTY_FUNCTION__<<endl;
}
};
// 线程安全的单例模式
class SingletonThreadSafe
{
private:
SingletonThreadSafe() { }
~SingletonThreadSafe() { }
SingletonThreadSafe(const SingletonThreadSafe &){};
SingletonThreadSafe & operator = (const SingletonThreadSafe &Other){return *this;};
public:
static SingletonThreadSafe & GetInstance()
{
static SingletonThreadSafe instance;
return instance;
}
void Display()
{
cout<<__PRETTY_FUNCTION__<<endl;
}
};
Singleton* Singleton::pInstance = nullptr;
int main(void){
Singleton::GetInstance()->Display();
SingletonThreadSafe::GetInstance().Display();
return 0;
}
运行结果:
void Singleton::Display()
void SingletonThreadSafe::Display()
网友评论