《单例模式(极简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;
}
相关推荐
ht巷子1 分钟前
asio::ip::tcp学习
网络·c++·tcp/ip
老前端的功夫3 分钟前
【Java从入门到入土】06:String的72变:从字符串拼接到底层优化
java·开发语言
啊我不会诶4 分钟前
2025 北京市大学生程序设计竞赛暨“小米杯”全国邀请赛
c++·学习·算法
程序猿(雷霆之王)5 分钟前
C++——AI大模型接入SDK
开发语言·c++
会编程的土豆14 分钟前
【从零学javase 第六天】网络编程(+多线程)
开发语言·网络·php
Yupureki20 分钟前
《C++实战项目-高并发内存池》8. 最终性能优化与测试
c语言·开发语言·数据结构·c++·算法·性能优化
漫雾_20 分钟前
被 Lazarus 长期利用的漏洞:Windows AppLocker 内核模式权限提升漏洞复现
c++·windows·安全
隔壁小邓21 分钟前
在Java中实现优雅的CQRS架构
java·开发语言·架构
一叶落43826 分钟前
LeetCode 74 | 搜索二维矩阵(C语言版题解)
c语言·数据结构·c++·算法·leetcode·矩阵·动态规划
河边小咸鱼27 分钟前
pdd校招实习生内推【实时更新链接】2027届实习、2026届春招
java·c++·golang