关注
//懒汉模式: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;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客2025仙途报告 #
4443次浏览 135人参与
# 礼物开箱Plog #
1616次浏览 73人参与
# 2025年终总结 #
177425次浏览 3000人参与
# 工作两年,想和老板谈涨薪怎么说 #
38794次浏览 175人参与
# 你面试体验感最差/最好的公司 #
22242次浏览 365人参与
# 秋招落幕,你是He or Be #
15622次浏览 287人参与
# 一人说一个提前实习的好处 #
14049次浏览 227人参与
# 考公VS就业,你怎么选? #
88107次浏览 497人参与
# 今年你最想重开的一场面试是? #
5685次浏览 75人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
13699次浏览 130人参与
# 重来一次,你会对开始求职的自己说 #
6941次浏览 175人参与
# 找工作,行业重要还是岗位重要? #
85804次浏览 1699人参与
# 实习没事做是福还是祸? #
18791次浏览 272人参与
# 机械制造秋招总结 #
97358次浏览 878人参与
# 职场新人体验 #
156930次浏览 1121人参与
# 工作中听到最受打击的一句话 #
8296次浏览 130人参与
# 团建是“福利”还是是 “渡劫” #
8115次浏览 160人参与
# 反问环节如何提问 #
126456次浏览 2669人参与
# 移动求职进展汇总 #
17920次浏览 143人参与
# 比亚迪线下宣讲会 #
17185次浏览 50人参与
