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

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


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

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

代码示例

#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;
}

 

相关推荐

  1. 模式c++)》

    2024-03-23 23:54:02       46 阅读
  2. 模版模式c++)》

    2024-03-23 23:54:02       34 阅读
  3. 《工厂模式c++)》

    2024-03-23 23:54:02       42 阅读
  4. 《原型模式c++)》

    2024-03-23 23:54:02       57 阅读
  5. 《过滤器模式c++)》

    2024-03-23 23:54:02       46 阅读
  6. 《适配器模式c++)》

    2024-03-23 23:54:02       45 阅读
  7. 《组合模式c++)》

    2024-03-23 23:54:02       42 阅读
  8. 《外观模式c++)》

    2024-03-23 23:54:02       37 阅读
  9. 《备忘录模式c++)》

    2024-03-23 23:54:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 23:54:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 23:54:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 23:54:02       82 阅读
  4. Python语言-面向对象

    2024-03-23 23:54:02       91 阅读

热门阅读

  1. 冒泡排序和选择排序--C语言

    2024-03-23 23:54:02       40 阅读
  2. 2024.3.5 校招 实习 内推 面经

    2024-03-23 23:54:02       39 阅读
  3. linux arm64 opencv 使用MJPG获取摄像头图片

    2024-03-23 23:54:02       37 阅读
  4. Springboot集成jersey打包jar找不到class处理

    2024-03-23 23:54:02       43 阅读
  5. 动态更改 Spring 定时任务 Cron 表达式的优雅方案

    2024-03-23 23:54:02       36 阅读
  6. 运维工作内容分类以及简略介绍

    2024-03-23 23:54:02       41 阅读
  7. vue中v-if和v-show的区别

    2024-03-23 23:54:02       40 阅读
  8. SQL语句每日一练四

    2024-03-23 23:54:02       44 阅读
  9. 第一章 python自动化模块

    2024-03-23 23:54:02       45 阅读
  10. 内网环境中申请SSL证书

    2024-03-23 23:54:02       36 阅读
  11. [思考记录]技术欠账

    2024-03-23 23:54:02       43 阅读
  12. (九)任务通知

    2024-03-23 23:54:02       40 阅读
  13. 黑盒测试和白盒测试总结

    2024-03-23 23:54:02       38 阅读
  14. C++简单实现哈希查找

    2024-03-23 23:54:02       41 阅读