简单的Logger

来源:互联网 发布:大学数据新闻比赛 编辑:程序博客网 时间:2024/06/07 01:46

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;};// 初始化_instanceauto_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
原创粉丝点击