首页 > 后端开发 > C++ > 正文

c++中如何实现单例模式_C++设计模式之单例模式实现详解

裘德小鎮的故事
发布: 2025-09-21 11:21:01
原创
227人浏览过
单例模式确保类唯一实例并提供全局访问点,C++中常用懒汉、饿汉和局部静态变量三种实现方式。1. 懒汉模式延迟初始化但需加锁保证线程安全;2. 饿汉模式程序启动即创建实例,线程安全但可能浪费资源;3. 局部静态变量法自C++11起线程安全,代码简洁且支持延迟初始化,为推荐写法。使用时需注意构造函数不调用虚函数、避免继承、合理管理生命周期及析构顺序问题,建议优先采用局部静态变量实现。

c++中如何实现单例模式_c++设计模式之单例模式实现详解

单例模式是一种常用的设计模式,确保一个类只有一个实例,并提供一个全局访问点。在C++中实现单例模式需要注意线程安全、构造顺序和资源释放等问题。下面介绍几种常见的实现方式。

懒汉模式(Lazy Initialization)

懒汉模式在第一次使用时才创建实例,适合初始化开销较大的情况。

// 基础懒汉模式(非线程安全)

class Singleton {
private:
    static Singleton* instance;
    Singleton() {}
public:
    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};
Singleton* Singleton::instance = nullptr;

这种方式在多线程环境下可能创建多个实例,因此需要加锁保证线程安全。

// 线程安全的懒汉模式(使用互斥锁)

#include <mutex>
class Singleton {
private:
    static Singleton* instance;
    static std::mutex mtx;
    Singleton() {}
public:
    static Singleton* getInstance() {
        std::lock_guard<std::mutex> lock(mtx);
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;

饿汉模式(Eager Initialization)

饿汉模式在程序启动时就创建实例,天然线程安全,但可能浪费资源。

立即学习C++免费学习笔记(深入)”;

class Singleton {
private:
    static Singleton instance;
    Singleton() {}
public:
    static Singleton& getInstance() {
        return instance;
    }
};
Singleton Singleton::instance;

由于静态成员变量在程序加载时初始化,不存在多线程竞争问题,简单可靠。

设计师AI工具箱
设计师AI工具箱

最懂设计师的效率提升平台,实现高效设计出图和智能改图,室内设计,毛坯渲染,旧房改造 ,软装设计

设计师AI工具箱 124
查看详情 设计师AI工具箱

局部静态变量(推荐写法)

C++11 起,局部静态变量的初始化是线程安全的,这是最简洁且安全的实现方式。

class Singleton {
private:
    Singleton() {}
public:
    static Singleton& getInstance() {
        static Singleton instance;
        return instance;
    }
};

这种写法自动保证线程安全,代码简洁,延迟初始化,无需手动管理内存。

注意事项与优化

使用单例模式时需注意以下几点:

  • 避免在构造函数中调用虚函数,可能导致未定义行为
  • 考虑是否需要支持继承,单例通常不设计为基类
  • 若使用指针形式,应提供销毁接口或使用智能指针管理生命周期
  • 在程序结束时若仍有单例对象被引用,需防止析构顺序问题

对于需要显式释放资源的情况,可增加 release 方法:

static void release() {
    if (instance != nullptr) {
        delete instance;
        instance = nullptr;
    }
}

基本上就这些。局部静态变量的方式是最推荐的现代C++实现方法,简洁且安全。

以上就是c++++中如何实现单例模式_C++设计模式之单例模式实现详解的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号