单例模式
注意要素:
- 需要实现多线程基本安全版本
- 静态的成员变量需要正确的初始化
- 构造函数需要置为私有或者保护
- 拷贝构造函数、移动构造函数、赋值运算符、移动赋值运算符需要禁用
需要理解的几个基本知识:右值、互斥锁
实现代码如下:
mutex g_mutex;
class SingleInstance
{
private:
SingleInstance() {}
SingleInstance(const SingleInstance& rhs) = delete; // 拷贝构造函数禁用
SingleInstance(const SingleInstance&& rhs) = delete;// 移动构造函数禁用
void operator=(const SingleInstance& rhs) = delete; // 赋值运算符禁用
void operator=(SingleInstance&& rhs) = delete; // 移动运算符禁用
public:
static SingleInstance* inst;
static SingleInstance* getInst() {
if (inst == nullptr) {
lock_guard<mutex> lock(g_mutex);
if (inst == nullptr) {
inst = new SingleInstance();
}
}
return inst;
}
};
SingleInstance* SingleInstance::inst = nullptr;
网友评论