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 @ 2024-04-03 15:10  paw5zx  阅读(16)  评论(0编辑  收藏  举报