C++自用小轮子——单例模板
简介
记录开发时自用的小轮子:单例模板。
单例模板
提供了一个基于模板的单例模式的实现,代码如下:
#ifndef SINGLETON_H
#define SINGLETON_H
template <typename T>
class CSingleton
{
public:
static T& GetInstance()
{
static T instance;
return instance;
}
protected:
CSingleton() {}
~CSingleton() {}
CSingleton(const CSingleton&) = delete;
CSingleton& operator=(const CSingleton&) = delete;
};
#endif // SINGLETON_H
使用方法
使用了奇异递归模板模式(Curiously Recurring Template Pattern, CRTP)。子类将自己作为模板参数传递给单例模板进行模板实例化,用做基类;同时在子类内部将基类声明为友元,这样才能在通过CSingleton
如此操作就可以使业务类(以CLogManager为例)具有单例属性,代码如下:
class CLogManager final : public CSingleton<CLogManager>
{
friend class CSingleton<CLogManager>;
public:
...
private:
CLogManager();
~CLogManager();
};
#endif // CLOGMANAGER_H
int main()
{
CLogManager& p_log_instance = CLogManager::GetInstance();
...
}