设计模式中的单例模式&c++

首先科普下单例模式的概念。

单例模式,本质上就是保证某个类实例在程序生存周期有且只有一个实例。

优点嘛,可以方便各个模块访问,被访问但不会一直创建new新的实例,始终只有这一个,可以节省资源。

最经典的用例便是用在日志记录模块,工程中可能很多地方都会进行日志的记录,每处记录如果都要创建新的日志类实例,好像太频繁了,很浪费资源的。这时候,单例类可以保证只有一个类对象,而不会一直new新的出来。直接访问就可以了。


下面我们会提供一个c++单例模板,其中核心便是使用了模板跟一个静态对象来保证其生存周期一直存在,供程序使用

template<typename T>
class CSingleton
{
public:
static T& GetInstance()
    {
    static T me;
    return me;
    }
};


如果你要弄一个日志记录单例类,可以继承上面这个单例模板,具体可以参见如下代码:

.h

#ifndef LOGGER_H
#define LOGGER_H
#include "singleton.h"

class Logger:public CSingleton<Logger>
{
public:
    Logger();
    void print();
private:
    int m_count;
};

#endif // LOGGER_H
.cpp

#include "logger.h"
#include <iostream>
Logger::Logger()
{
    m_count=0;
}

void Logger::print()
{
    m_count++;
    std::cout<<"Logger is exist! value is :"<<m_count<<std::endl;
}


具体程序中使用该日志记录类的方法如下:
#include "logger.h"
using namespace std;
 
int main()
{
    cout << "Hello World!" << endl;
    new Logger();
    for(int i=0;i<5;i++)
        Logger::GetInstance().print();
    return 0;
}
 
 

 

Done!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值