设计模式之单例模式
Singleton Pattern
这里不做模式的分析讨论,仅针对使用过的用法进行演示。
最早使用的方法:
.h
#include <mutex>
class A
{
public:
explicit A();
~A();
static A *Instance()
{
//检测实例是否存在
if (!self)
{
std::lock_guard<std::mutex> lock(m_mutex);
//再次检测
if (!self)
{
self = new A;
}
}
return self;//返回唯一实例s
}
private:
static std::mutex m_mutex;
static A *self;
}
.cpp
//初始化静态变量
std::mutex A::m_mutex;
A *A::self = nullptr;
A::A()
{
//init
}
A::~A()
{
}
之后发现当你模式无法在程序结束时自动调用析构函数,遂找到如下方法
#include <mutex>
class A
{
public:
explicit A();
~A();
static A *Instance()
{
//检测实例是否存在
if (!self)
{
std::lock_guard<std::mutex> lock(m_mutex);
//再次检测
if (!self)
{
self = new A;
}
}
return self;//返回唯一实例s
}
private:
//在模式内部,定义一个类成员,利用类的析构特性,删除自身
class delete
{
public:
~delete()
{
if(A::self)
{
delete A::self;
A::self = nullptr;
}
}
};
static std::mutex m_mutex;
static A *self;
static delete m_delete;
}
//初始化静态变量
std::mutex A::m_mutex;
A *A::self = nullptr;
//添加对delete的初始化
A::delete A::m_delete;
A::A()
{
//init
}
A::~A()
{
}