单例模式

简介: 单例模式

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` 变量指向的实例

相关文章
|
前端开发
走进ES6的世界:基础语法入门指南4
走进ES6的世界:基础语法入门指南
122 0
|
2天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全
|
3天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1021 151
|
3天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1720 9
|
8天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
660 152
|
10天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
625 13