单例模式

简介: 单例模式

1.介绍

单例模式可以保证在整个应用程序中只有一个实例,这样可以避免多个实例对同一资源的访问冲突。在实现数据库连接池时,使用单例模式可以保证整个应用程序中只有一个连接池,这样可以更好地管理和分配数据库连接

单例模式目的是确保一个类只有一个实例,并提供一个全局访问点。在C++中,可以通过以下方式实现单例模式:

  1. 将构造函数、拷贝构造函数和赋值运算符声明为私有,以防止外部创建实例或复制实例。
  2. 在类中定义一个静态私有成员变量,用来存储唯一的实例。
  3. 提供一个公共的静态方法,用于获取唯一的实例。在这个方法中,如果实例不存在,则创建一个新的实例并返回;否则直接返回已有的实例

2.举例

现在举个简单例子来说明

class Singleton {
private:
    static Singleton* instance;
    Singleton() {}
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
public:
    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};
Singleton* Singleton::instance = nullptr;

这种实现方式并不是线程安全的,如果需要在多线程环境中使用单例模式,可以使用双重检查锁定(double-checked locking)或其他线程安全的方法来保证线程安全

其中`Singleton* Singleton::instance = nullptr;` 这一行代码定义了一个静态成员变量 `instance`,并将其初始化为 `nullptr`。这意味着在程序开始运行时,`Singleton` 类的唯一实例尚未创建

静态成员变量是属于类的,而不是属于某个特定的对象。这意味着无论创建多少个 `Singleton` 对象,它们都共享同一个 `instance` 变量。在这种情况下,由于构造函数是私有的,所以无法直接创建 `Singleton` 对象,因此 `instance` 变量将始终指向唯一的实例

在 `getInstance()` 方法中,如果 `instance` 变量为 `nullptr`,则会创建一个新的 `Singleton` 实例并将其地址赋给 `instance` 变量。否则,直接返回 `instance` 变量指向的实例

相关文章
|
6月前
|
SQL
单例模式
单例模式
48 0
|
5月前
|
设计模式 安全 Java
单例模式分享
单例模式分享
23 0
|
设计模式 安全 编译器
2023-6-12-第三式单例模式
2023-6-12-第三式单例模式
72 0
|
设计模式 安全 Java
单例模式的运用
单例模式的运用
44 0
|
设计模式 Java Spring
什么场景要使用单例模式,什么场景不能使用?
经常有小伙伴问我,设计模式学了这么久,每次看到概念也都能理解。但是,就是不知道怎么用,在哪里能用?我告诉大家,设计模式,不是为了要用而用的,而是作为前人总结下来的经验,等到哪天需要用的时候,你能想起来为你所用。
104 0
|
设计模式 缓存 JSON
没那么简单的单例模式
没那么简单的单例模式
126 0
没那么简单的单例模式
|
存储 安全 调度
单例模式的简单介绍
单例模式的简单介绍
|
设计模式 安全 Java
回顾一下单例模式
回顾一下单例模式
|
数据采集 设计模式 算法
大佬,人人都说精通的单例模式,你精通了吗
大佬,人人都说精通的单例模式,你精通了吗
87 0
大佬,人人都说精通的单例模式,你精通了吗
|
设计模式 数据库 Python