一个线程安全的 lrucache 实现 --- 读 leveldb 源码

2018-03-15
阅读 11 分钟
9.3k
缓存是计算机的每一个层次中都是一个非常重要的概念,缓存的存在可以大大提高软件的运行速度。Least Recently Used(lru) cache 即最近最久未使用的缓存,多见与页面置换算法,lru 缓存算法在缓存的大小达到最大值之后,换出最早未被使用的缓存。在阅读 leveldb 的源代码的时候,发现其中的 cache 类正是一个线程安全的 l...

对象工厂(2)---一个泛化的工厂类

2018-03-01
阅读 5 分钟
4.1k
在我的上一篇博客对象工厂(1)---和万恶的 switch 说再见中,我们通过使用函数指针索引的方法,为我们的工厂类代码中消除了 switch 语句。本篇博客的目标是将实现一个泛化的工厂类,实现代码复用。下面让我们先分析一下在对象工厂(1)---和万恶的 switch 说再见中的工厂类的几个主要角色:

对象工厂(1)---和万恶的 switch 说再见

2018-02-28
阅读 4 分钟
5.2k
当系统中存在某抽象基类中有很多具体子类,一个简单实用的策略是创建对象的逻辑封装到一个工厂方法中。这样,可以在不影响客户端代码的情况下扩展具体子类。但是一个低质量的实现(比如像下面的代码,使用了 switch 语句),会导致编译的高耦合以及扩展的高成本,通过阅读 《modern c++ design》一书,看到了一个比较优...

c++ 于编译期检测两个类型之间是否可以转化

2018-02-27
阅读 2 分钟
2.7k
在学习《modern c++ design》的时候,学习到了如何在 compile-time 检测两个类型之间是否可以转化. 这里的转换,既包括 int,long,double 这些数据类型之间的转换,也包括基类和子类之间的转换(也就是两个类之前是否存在 class A 继承自 class B)。但是这篇文章最核心点在于 compile-time 这个限定词。因为这些检测是...