boost log -- header only 的心酸历程(四)

18 篇文章 0 订阅
16 篇文章 5 订阅

好久没有谈论boost log这个话题了。前两天突然发之前由于粗心,忽略了一些问题。

之前为了引用方便,将这个转换成header only。header only的好处就是-- 使用时不用额外的link动态库。这样应用它的时候更加方便。坏处就是 -- 增加重新编译的时间。

这都不是关键。 为了实现logger 功能的全局可见。 首先想到的就是用单例模式。然而单例模式如果不是header only的话实现起来很简单。有个static 的getInstance方法,返回一个static的变量。但是问题就出现再这个变量上。

众所周知,当一个普通的C++变量被static修饰的时候,会改变两个属性 -- 第一个就是变量会预先分配内存, 第二个就是改变它的连接属性。换句话说我们可以再头文件里边写一个static变量,但是当有其他cpp文件include这个文件的时候,每编译一个cpp文件,就会生成一个独立的static变量。也就是说有多少cpp文件include,就有多少相互独立的 static 变量。

然鹅这并不是我们期待的, 我们期待的是大家要公用一个变量。为了解决这个问题。首先想到的是规避static变量在CPP文件中分配内存。也就是像下边这么书写

    static logger_iface **getLoggerAddr()

    {

        static logger_iface *activeLogger;

        return &activeLogger;

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值