使用场景:
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
要求生成唯一序列号的环境;
在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的;
创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源;
需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然,也可以直接声明为static的方式)。
#include<iostream>
#include<mutex>
using namespace std;
class Singleton
{
public:
static Singleton* Instance();
static void Delete();
protected:
Singleton() { cout << "Singleton....." << endl; }
~Singleton() {}
private:
static Singleton* _instance;
static mutex* my_mutex;
};
Singleton* Singleton::_instance = nullptr;
mutex* Singleton::my_mutex = new mutex;
Singleton* Singleton::Instance()
{
if(_instance == nullptr)
{
my_mutex->lock();
if(_instance == nullptr)
{
_instance = new Singleton();
}
my_mutex->unlock();
}
return _instance;
}
void Singleton::Delete()
{
if(_instance != nullptr && my_mutex != nullptr)
{
delete _instance;
delete my_mutex;
}
else
{
throw "Singleton Delete error";
}
}
int main(int argc, char* argv[])
{
Singleton* sin = Singleton::Instance();
Singleton* app = Singleton::Instance();
Singleton::Delete();
return 0;
}
0 评论