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

c++如何实现单例模式_c++单例模式实现方法

裘德小鎮的故事
发布: 2025-09-29 18:03:01
原创
367人浏览过
单例模式通过私有构造函数、静态实例和全局访问点确保类唯一实例。1. 懒汉模式延迟初始化,需加锁保证线程安全;2. 饿汉模式程序启动即创建,线程安全但可能浪费资源;3. 局部静态变量法(C++11)最推荐,线程安全、简洁且自动管理生命周期,配合删除拷贝和赋值操作确保唯一性。

c++如何实现单例模式_c++单例模式实现方法

单例模式确保一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式需要控制构造函数的访问、定义静态实例以及提供静态获取方法。以下是几种常见的实现方式。

懒汉模式(延迟初始化)

实例在第一次使用时才创建,适合资源敏感场景。

特点: 延迟加载,但需处理多线程安全问题。

基础实现:

class Singleton {
private:
    static Singleton* instance;
    Singleton() {}  // 私有构造函数
<p>public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};</p><p>// 静态成员定义
Singleton* Singleton::instance = nullptr;</p>
登录后复制

上述版本在多线程环境下不安全。加锁后线程安全版本:

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

<code class="cpp">#include <mutex>
<p>class Singleton {
private:
static Singleton* instance;
static std::mutex mtx;
Singleton() {}</p><p>public:
static Singleton* getInstance() {
std::lock_guard<std::mutex> lock(mtx);
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};</p><p>Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;
登录后复制

饿汉模式(程序启动时初始化)

实例在程序启动时就创建,无需考虑多线程问题。

创意艺术设计的网站模板
创意艺术设计的网站模板

创意艺术设计的网站模板 创意艺术是指是把再简单不过的东西或想法不断延伸给予的另一种表现方式,创意设计包括工业设计、建筑设计、包装设计、平面设计、服装设计、个人创意特区等内容。 设计除了具备“初级设计”和“次设计”的因素外,还需要融入“与众不同的设计理念——创意”。搜索 一、初级设计 范围划分一般是以是否在表达图形上是否以“具象化”为指导目标,标志设计就像绘画一样真实表现图形。 二、次级设

创意艺术设计的网站模板 50
查看详情 创意艺术设计的网站模板
特点: 线程安全,但可能浪费资源。

实现方式:

class Singleton {
private:
    Singleton() {}
    static Singleton instance;  // 静态成员变量
<p>public:
static Singleton& getInstance() {
return instance;
}
};</p><p>// 定义静态成员
Singleton Singleton::instance;
登录后复制

由于静态变量在程序启动时初始化,天然线程安全,适用于对象创建开销小且一定会使用的场景。

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

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

class Singleton {
private:
    Singleton() {}
    ~Singleton() {}
<p>public:
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;</p><pre class='brush:php;toolbar:false;'>static Singleton& getInstance() {
    static Singleton instance;  // 局部静态变量
    return instance;
}
登录后复制

}; 优点: 自动管理生命周期,线程安全,代码简洁。

利用了“局部静态变量只初始化一次”的特性,编译器保证线程安全,无需手动加锁。

注意事项

  • 禁止拷贝和赋值操作,防止意外复制实例。
  • 注意析构顺序,若单例依赖其他全局对象,可能引发未定义行为。
  • 避免频繁调用 getInstance() 影响性能,可缓存指针引用。

基本上就这些。局部静态变量方式是最推荐的现代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号