单例模式

2021-07-23  本文已影响0人  上官宏竹

单例模式

注意要素:

  1. 需要实现多线程基本安全版本
  2. 静态的成员变量需要正确的初始化
  3. 构造函数需要置为私有或者保护
  4. 拷贝构造函数、移动构造函数、赋值运算符、移动赋值运算符需要禁用

需要理解的几个基本知识:右值、互斥锁
实现代码如下:

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;
上一篇 下一篇

猜你喜欢

热点阅读