您的位置 首页 编程知识

c++ 如何实现单例设计模式_c++单例模式的几种实现方式

懒汉模式线程不安全,多线程可能创建多个实例;2. 加锁懒汉线程安全但性能低;3. 双重检查锁定减少锁开销,需C…


懒汉模式线程不安全,多线程可能创建多个实例;2. 加锁懒汉线程安全但性能低;3. 双重检查锁定减少锁开销,需C++11以上保证原子性;4. 饿汉模式程序启动即创建,线程安全但浪费资源;5. 局部静态变量方式最推荐,C++11起线程安全、延迟加载且简洁。

c++ 如何实现单例设计模式_c++单例模式的几种实现方式

单例设计模式确保一个类只有一个实例,并提供全局访问点。在C++中,有多种实现方式,每种都有其适用场景和注意事项。以下是几种常见的C++单例模式实现方法。

1. 懒汉模式(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;

问题:多线程环境下可能创建多个实例。

2. 加锁的懒汉模式 – 线程安全

通过互斥锁保证线程安全,但每次调用都要加锁,影响性能。

立即学习“”;

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

3. 双重检查锁定(Double-Checked Locking)

减少锁竞争,只在初始化时加锁,提升性能。

class Singleton {
private:
    static Singleton* instance;
    static std::mutex mtx;
    Singleton() {}

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

注意:需确保指针赋值是原子操作,C++11后基本支持。

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

c++ 如何实现单例设计模式_c++单例模式的几种实现方式 124

4. 饿汉模式(Eager Initialization)

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

class Singleton {
private:
    static Singleton instance;
    Singleton() {}

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

优点:无延迟,线程安全;缺点:即使不用也会创建。

5. 局部静态变量(推荐)

C++11起,局部静态变量初始化是线程安全的,简洁高效。

class Singleton {
private:
    Singleton() {}

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

这是目前最推荐的方式:线程安全、、代码简洁。

基本上就这些常见实现方式。选择哪种取决于是否需要延迟加载、线程安全要求以及C++标准支持情况。现代C++项目优先使用局部静态变量方式。

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

相关标签:

大家都在看:

本文来自网络,不代表四平甲倪网络网站制作专家立场,转载请注明出处:http://www.elephantgpt.cn/16505.html

作者: nijia

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

18844404989

在线咨询: QQ交谈

邮箱: 641522856@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部