Content Table

单例的其他实现

单例还有没有其他的实现方式?
有,我们的实现,使用的就是传说中的懒汉方式,还有饿汉方式,实现也挺简单的

1
2
3
4
5
6
7
1. 把单例的简单实现中的
static QMutex mutex;
static ConfigUtil *instance; // ConfigUtil 全局唯一的变量
换成
static ConfigUtil instance;

2. getInstance() 直接返回这个 instance 即可,还没有线程同步的问题

此外,还可以直接在 getInstance() 函数里定义一个静态的 ConfigUtil 变量(具体的可以参考 Qt 的宏 Q_GLOBAL_STATIC 的实现)。

单例的饿汉方式写起来很简单,为什么要花这么多时间用懒汉方式来实现呢?
  • 一是饿汉方式有它自己的缺点,程序启动的时候就会创建这个单例对象,如果创建这个对象很耗时,就会使得程序启动时间过长,有的时候可能不需要这个对象,但是也给我们创建了,浪费资源,可以在网络上搜索到很多讨论的文章。
  • 二是懒汉方式自身的优点以及涉及到的知识点更多,希望通过介绍实现与代码优化过程,丰富知识的同时能从中有所启发,提高我们的编码技能,代码不仅功能不能少,优雅也是很重要的,那个……至少能和别人吹吹牛也是极好的。