参考链接:
https://www.cnblogs.com/sunchaothu/p/10389842.html
版本1:饿汉式,在一开始就创建好实例
构造函数私有,使用静态局部变量,缺点只能在C++11以上环境中运行
class Singleton{
public:
~Singleton() {
cout<<"deconstruct"<<endl;
}
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
private:
Singleton() {
cout<<"construct"<<endl;
}
};
//或者
class Singleton{
public:
~Singleton() {
cout<<"deconstruct"<<endl;
}
static Singleton *getInstance() {
static Singleton instance;
return &instance;
}
private:
Singleton() {
cout<<"construct"<<endl;
}
};
版本二:懒汉式,在需要的时候再创建实例,
一开始只会分配指针空间,而后面才会分配对象
若两个线程同时调用getInstance()会有问题,需要加锁
#include <iostream>
#include <string>
#include <vector>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
class Singleton
{
private:
static Singleton* m_instance;
static pthread_mutex_t mutex;
Singleton(){}
public:
static Singleton* getInstance() {
if(NULL == m_instance) {
pthread_mutex_lock(&mutex);
if(NULL == m_instance)
{
m_instance = new Singleton;
}
pthread_mutex_unlock(&mutex);
}
return m_instance;
}
};
pthread_mutex_t Singleton::mutex;
Singleton* Singleton::m_instance = NULL;
int main()
{
Singleton* sin = Singleton::getInstance();
Singleton* sin2 = Singleton::getInstance();
system("pause");
return 0;
}