zStack

zStack

马上订阅 zStack RSS 更新: https://blog.noicdi.com/atom.xml

单例模式的几种 C++ 实现

2024年3月26日 17:00

写在前面

在开发中,有时候会需要一些类在项目的生命周期中只有一个实例。这样的设计被称作单例模式。

本文用于记录项目开发过程中,设计日志管理器时用到的单例模式,以及开发过程中的一些学习和思考。

饿汉与懒汉

单例模式中有饿汉和懒汉两种模式,饿汉模式指在程序启动时即进行单例的构造;懒汉模式为懒加载,只有第一次调用时才会进行单例的构造。

在多线程开发中,要求对象的 this 指针在构造期间不被泄漏。饿汉模式只要选择合适的单例构造时间,即可保证;但是懒汉模式可能会在多线程并发调用时,触发线程安全问题1

本文主要关注懒汉模式下单例构造时的多线程安全问题。

最简单的版本

在设计单例模式时,考虑到生命周期中只有一个实例,那么类的构造函数应当是不应该被使用者随意调用的,但是又需要生成单例使用。基于这个要求,可以得到最基本的两点:

  1. 类的构造函数应当是 private 的。
  2. 类应该提供一个静态函数用于获取单例。

基于以上要求,先写一个简单版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// log_manager.h

class LogManager
{
public:
static LogManager* getInstance()...

剩余内容已隐藏

查看完整文章以阅读更多