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::getInstance()方法创建CLogManager唯一实例时,调用到CLogManager的私有的构造函数。
如此操作就可以使业务类(以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();
...
}
posted @   paw5zx  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示