#include <iostream>
using namespace std;
#include <mutex>
/*
懒汉式
*/
class SingleTon {
private:
SingleTon() {
}
private:
static SingleTon* ton;
static int count;
static mutex mu;
public:
static SingleTon* getInstance() {
if (ton == NULL) {
mu.lock();
if (ton == NULL)
{
ton = new SingleTon;
}
mu.unlock();
}
return ton;
}
void add() {
count++;
cout<<count<<endl;
}
};
//静态变量的初始化放在类的外部
//?因为类定义的时候并没有分配内存,静态变量也不能等到创建对象的时候才分配内存,必须提前分配
SingleTon* SingleTon::ton = NULL;
int SingleTon::count = 1;
mutex SingleTon::mu;
/////////////////////////////////////////////////////////////////////////////////
/*
饿汉式
*/
class SingleTon2 {
private:
SingleTon2() {
}
private:
static SingleTon2* ton;
static int count;
public:
static SingleTon2* getInstance() {
return ton;
}
void add() {
count++;
cout << count << endl;
}
};
//静态变量的初始化放在类的外部
//?因为类定义的时候并没有分配内存,静态变量也不能等到创建对象的时候才分配内存,必须提前分配
SingleTon2* SingleTon2::ton = new SingleTon2;
int SingleTon2::count = 1;
void main() {
SingleTon* s = SingleTon::getInstance();
s->add();
SingleTon* s1 = SingleTon::getInstance();
s1->add();
SingleTon2* s3 = SingleTon2::getInstance();
s3->add();
SingleTon2* s4 = SingleTon2::getInstance();
s4->add();
system("pause");
}
网友评论