简单的Logger

C++简单的Logger

第一次用markdown编辑,感觉确实很好用。做了下楼赛的题目,下面做做笔记留下标记学习。

  • 主要知识点
    • 单例模式
    • 智能指针

easyLogger.h

#pragma once
#include <memory>
#include <ctime>
#include <iostream>
#include <fstream>

using namespace std;

class easyLogger
{
public:
    static easyLogger *myInst(){
        if (NULL == _instance.get()){
            _instance.reset(new easyLogger);
        }
        return _instance.get();
    }

    void Log(const string& logInfo);

private:
    easyLogger(void){}
    virtual ~easyLogger(void){}
    friend class auto_ptr<easyLogger>;
    static auto_ptr<easyLogger> _instance;
};
// 初始化_instance
auto_ptr<easyLogger> easyLogger:: _instance;

void easyLogger::Log(const string& logInfo) {
    ofstream ofs;
    time_t t = time(0);
    char tmp[64];
    // [2017.07.12 13:50:36 Wednesday]
    strftime(tmp, sizeof(tmp), "[%Y.%m.%d %X %A]", localtime(&t));

    // 写easyLogger.log文件
    ofs.open("shiyanloulogger.log",ofstream::app);
    ofs.write(logInfo.c_str(), logInfo.size());

    ofs << tmp << endl;
    ofs.close();
}

loggertest.cpp

#include "easyLogger.h"

int main() {
    easyLogger::myInst()->Log("logger info");
    return 0;
}
  • 1.单例模式三个关键点:
    • 1)私有的静态实例对象 private static instance
    • 2)私有的构造函数 private Singleton()
    • 3)公有的静态访问实例对象的方法 public static Singleton getInstance()
      类的静态成员变量必须在类外进行初始化
      详见:http://blog.csdn.net/ayj12345/article/details/78551260
  • 2.智能指针
    • C++中指针申请内存,new/delete由用户决定对象的生命期。而智能指针是对普通指针进行封装,使得智能指针能方便地管理一个对象的生命期,自动执行对象的释放,实现内存的自动回收,也有说智能指针为了垃圾回收,其实都是一个意思。
    • 智能指针一个关键是使用引用计数用于对象生存期控制。每次创建类的新对象时,初始化指针并将引用计算置1;党对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数减至0,则删除对象),并增加右操作数所指对象的引用计数;调用析构函数时,析构函数减少引用计数(如果引用计数减至0,则删除对象)。
    • auto_ptr常用成员函数:
      • get() 返回auto_ptr指向的那个对象的内存地址。
      • reset() 重新设置auto_ptr指向的对象。
  • 这里还有一个地方:fiend class auto_ptr;
    将auto_ptr作为easyLogger类的友元,这样auto_ptr类能访问easyLogger类的私有成员。

参考:

  1. 楼赛12期题目
  2. https://www.cnblogs.com/lanxuezaipiao/p/4132096.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值