关注
//懒汉模式:lazy load 只有用了才加载 复杂场景下也可以使用
namespace LAZY
{
class Lock
{
public:
Lock(mutex& mux) :_mux(mux){
//_mux.lock();
}
~Lock(){
//_mux.unlock();
}
//防拷贝
protected:
Lock(const Lock& mx);
Lock& operator=(const Lock& mx);
private:
mutex& _mux;
};
class Singleton
{
public:
//判断是否为空,如果为空则创建,不为空就直接返回
static Singleton* GetInstance()
{
//加锁线程安全,如果中间返回了会造成死锁 所以自己写了一个
//mu.lock();
lock_guard<mutex> lock(mu);
// 双检查
if (_ints == NULL)
{
Lock lock(mu);
if (_ints == NULL)
{
Singleton* tmp = new Singleton;
//内存栅栏 栅栏之后和之前的语句不能被打乱 防止编译器对程序进行优化
MemoryBarrier();
_ints = tmp;
}
}
//mu.unlock();
return _ints;
}
//销毁单例模式
static void DelInstance()
{
lock_guard<mutex> lock(mu);
if (_ints)
{
cout << "test if delete" << endl;
delete _ints;
_ints = NULL;
}
}
//防拷贝,只声明不实现
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
void Print()
{
cout << "Singleton:" << _a << endl;
}
private:
//将构造函数声明为私有
Singleton() :_a(0)
{}
int _a;
static mutex mu;
static Singleton* _ints;
};
Singleton* Singleton::_ints = NULL;
mutex Singleton::mu;
void test()
{
Singleton::GetInstance()->Print();
//如果在此之后还有人创建单例怎么办??所以最好不要手动释放
//Singleton::DelInstance();
atexit(Singleton::DelInstance);
}
}
//饿汉模式:程序运行就创建 简洁,适用性会受到限制
namespace HUNGRY
{
class Singleton
{
public:
static Singleton& GetInstance()
{
static Singleton inst;//进来第一次创建 后面进来不再创建,直接返回
return inst;
}
void Print()
{
cout << "Singleton:" << _a << endl;
}
protected:
Singleton() :_a(0)
{}
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
int _a;
};
void test1()
{
Singleton::GetInstance().Print();
}
}
int main()
{
//HUNGRY::test1();
LAZY::test();
system("pause");
return 0;
}
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
- 1... AI公司突然疯狂招实习生,百度在提前布局什么?1.3W
- 2... 入职携程机票BU 大半年,聊聊体验5994
- 3... 在携程做前端是一种什么体验5994
- 4... 投递携程酒店BU,这些技术你得知道(附上岸攻略)5201
- 5... 春招冲刺|翼支付求职经验分享:从投递到面试,我做了哪些准备?3693
- 6... 从网申到终面,一个普通应届生的真实上岸记录2404
- 7... 春招/校招生如何证明自己的AI Coding能力?2071
- 8... 我妈其实不懂什么叫春招秋招。1865
- 9... 蚂蚁后端一面1602
- 10... 本科生就业何去何从1508
正在热议
更多
# 有哪些公司在面试时考察AICoding? #
5696次浏览 106人参与
# 如何快速融入团队? #
47516次浏览 298人参与
# 厦门银行科技岗值不值得投 #
21314次浏览 470人参与
# 父母问你工作找得怎么样,怎么回 #
13461次浏览 172人参与
# AI“智障”时刻 #
34752次浏览 150人参与
# 从投递到OC,你用了多久 #
12862次浏览 113人参与
# AI时代还有必要刷leetcode吗? #
4000次浏览 65人参与
# 想从事Agent应该学习哪些技术? #
3058次浏览 101人参与
# 找工作如何保持松弛感? #
136794次浏览 1468人参与
# 你认为小厂实习有用吗? #
137186次浏览 735人参与
# 什么人最适合大厂? #
7047次浏览 70人参与
# 顺丰求职进展汇总 #
84275次浏览 360人参与
# HR面都在聊什么? #
5593次浏览 74人参与
# 查收我的offer竞争力报告 #
292466次浏览 1738人参与
# 如果没找到工作,考公是你的退路吗 #
70489次浏览 458人参与
# 哪些公司面试还在问八股? #
6667次浏览 68人参与
# 双非本科的出路是什么? #
227442次浏览 1651人参与
# 哪一刻你突然觉得实习“有点值了” #
8454次浏览 66人参与
# 你面试被问到过哪些不会的问题? #
119889次浏览 1940人参与
# 我的求职进度条 #
1022164次浏览 6944人参与
# 那些我实习了才知道的事 #
286579次浏览 1808人参与
