C++单例模式实现再回顾

单例模式需要注意的问题:

1、static实例保证只有一个实例

2、需要C++类外初始化实例、线程锁等

3、私化构造函数,关闭赋值运算符=和拷贝构造函数

4、应当有Releas函数

5、应该考虑线程安全问题

下面是懒汉模式的实现:

#include <thread>
#include <mutex>

class  singleton
{
private:
    singleton() = default;

public:
    static singleton * m_instance;
    static std::mutex mu;

    static singleton * GetInstance();
    void Print();
    void Release();

    singleton & operator=(const singleton & pinstance) = delete;
    singleton(const singleton & pinstance) = delete;
    ~ singleton();
};
#include "single.h"
#include <iostream>
using namespace std;

singleton* singleton::m_instance=nullptr;
std::mutex singleton::mu;

void singleton::Print(){
std::cout<<" It's a singleton"<<std::endl;
}

singleton* singleton::GetInstance(){
    if (m_instance==nullptr)
    {
        mu.lock();
        if (m_instance==nullptr)
        {
          m_instance=new singleton();
        }
        mu.unlock();
    }
  return m_instance;
}

void singleton::Release(){
    delete m_instance;
}
原文地址:https://www.cnblogs.com/xietianjiao/p/13525029.html