单例模式

简介: 单例模式

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月前
|
设计模式
单例模式
单例模式
37 0
|
5月前
|
设计模式 安全 Java
单例模式分享
单例模式分享
23 0
|
设计模式 安全 编译器
2023-6-12-第三式单例模式
2023-6-12-第三式单例模式
72 0
|
6月前
|
安全 C++
C++单例模式
C++单例模式
52 1
|
设计模式 前端开发
关于单例模式我所知道的
关于单例模式我所知道的
58 0
关于单例模式我所知道的
|
SQL 安全 Java
五种单例模式介绍
五种单例模式介绍
91 0
|
设计模式 缓存 JSON
没那么简单的单例模式
没那么简单的单例模式
126 0
没那么简单的单例模式
|
SQL 安全 Java
单例模式的理解
谈谈你对单例模式的理解。也算是老生常谈的问题了~~~
1038 1
|
XML 设计模式 安全
单例模式,真不简单
单例模式,真不简单
单例模式,真不简单
|
设计模式 安全 Java
回顾一下单例模式
回顾一下单例模式
120 0