1. 背景:
单例模式分什么懒汉、饿汉啥的,大家只要懂得概念应付面试就好了。单例模式一般是资源管理器呀,什么全局唯一的一些东西,其实并不需要什么性能,也不会占用太大内存,有的时候甚至都不用考虑加锁,有些不持续的内存泄露也无妨。
2. 单例模式
比较建议使用饿汉模式,饿汉模式的分配是不考虑竞争的,仅分配一次的,不影响性能的。
class Obj
{
private:
Obj()
Obj(const Obj& o);
public:
static Obj* instance();
};
Obj* Obj::instance() {
static Obj* po = new Obj;
return po;
}
在这里我介绍下载c++11里的一个新概念 std::call_once
首先我们需要顶一个call_once变量:
std::once_flag _flag
其次,我们需要指定那个函数只能调用一次:
std::call_once(_flag, [&]() {
instance_.reset(new Obj);
});
在这里我们用一个lambda表达式指定需要执行的函数,可以看到我们给类内静态变量instance赋值了new Obj
完整代码如下:
class Obj {
private:
Obj()
Obj(const Obj& o);
static Obj* _instance;
public:
static Obj* instance();
};
Obj* Obj::instance() {
std::once_flag _flag;
std::call_once(_flag, [&]() {_instance = new Obj;});
}