《单例模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


本章简要说明单例模式。本文分为**++模式说明、本质思想、实践建议、代码示例++**四个部分。

模式说明
  • 方案: 单例模式确保一个类只有一个实例,并提供一个全局访问点。
  • 优点: 减少内存占用,避免重复创建对象,提供全局访问点。
  • 缺点: 需要业务理解,将单例改为非单例,对原有代码逻辑有影响
本质思想:通过静态方法或者全局变量确保类只有一个实例,并提供访问这个实例的全局访问点。
实践建议:c++11之后,放弃考虑所谓的饿汉、懒汉模式,在实践中已经无用了。因为c++11之后static初始化已经线程安全了,并且在第一次使用时才创建。

代码示例:

cpp 复制代码
#include <iostream>

class Bird {
public:
    // 静态方法获取唯一实例
    static Bird* getInstance() {
        static Bird instance; // 静态局部变量初始化,在C++11中是线程安全的
        return &instance;
    }

    void fly() {
        std::cout << "Bird is flying." << std::endl;
    }

private:
    // 将构造函数私有化
    Bird() {}
};

int main() {
    // 获取实例并调用方法
    Bird* bird = Bird::getInstance();
    bird->fly();

    // 尝试再次获取实例,应该返回相同实例
    Bird* anotherBird = Bird::getInstance();
    if (bird == anotherBird) {
        std::cout << "Both pointers point to the same instance." << std::endl;
    }

    // 输出:
    /*
    Bird is flying.
    Both pointers point to the same instance.
    */

    return 0;
}
相关推荐
nice_lcj5201 小时前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
紧跟先前的步伐1 小时前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
bksczm2 小时前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
春涧草茶2 小时前
慢就是快16-1协程
开发语言·前端·python
Dovis(誓平步青云)3 小时前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
做科研的周师兄3 小时前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
闻缺陷则喜何志丹4 小时前
【C++特性】四种类型转
c++·算法·类型转换
.痞老板.4 小时前
java ee--计算机是如何工作的
java·开发语言·java-ee
奇树谦4 小时前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
青梅味猪大肠5 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统