0
点赞
收藏
分享

微信扫一扫

用C++实现单例模式

星河出山 2024-05-01 阅读 18

单例模式(Singleton Pattern)是一种常用的软件设计模式,它保证一个类在整个应用程序中仅有一个实例,并提供一个全局访问点来获取这个实例。这种模式常用于那些需要频繁创建且消耗资源较多的对象,或者需要控制对共享资源访问的场景,比如数据库连接池、线程池、配置管理器等。

特点

实现要点

在C++中实现单例模式,可以采用多种方式,这里我将展示几种常见的实现方法,包括饿汉式、懒汉式(含双重检查锁定)、以及静态内部类方式(C++中没有直接的静态内部类,但可以通过命名空间或者嵌套类模拟)。请注意,C++11及以后版本提供了更强大的线程支持,因此在实现时可以利用原子操作等现代C++特性来确保线程安全性。

  1. 饿汉式
    饿汉式在类加载时就完成了初始化,线程安全且简单直接,但可能会提前占用资源。
class Singleton {
public:
    static Singleton& getInstance() {
        return instance;
    }

private:
    Singleton() {} // 私有构造函数
    ~Singleton() {} // 私有析构函数防止外部delete
    Singleton(const Singleton&) = delete; // 禁止拷贝构造
    Singleton& operator=(const Singleton&) = delete; // 禁止赋值运算符

    static Singleton instance; // 静态实例
};

// 初始化静态成员
Singleton Singleton::instance;
  1. 懒汉式 + 双重检查锁定
    懒汉式在首次使用时才初始化实例,双重检查锁定进一步优化了并发性能。
#include <mutex>

class Singleton {
public:
    static Singleton& getInstance() {
        if (!instance_) {
            std::lock_guard<std::mutex> lock(mutex_);
            if (!instance_) {
                instance_ = new Singleton();
            }
        }
        return *instance_;
    }

private:
    Singleton() {} // 私有构造函数
    ~Singleton() {} // 私有析构函数
    Singleton(const Singleton&) = delete; // 禁止拷贝构造
    Singleton& operator=(const Singleton&)赋值运算符

    static Singleton = delete; // 禁止* instance_; // 静态指针实例
    static std::mutex mutex_; // 互斥锁
};

// 初始化静态成员
Singleton* Singleton::instance_ = nullptr;
std::mutex Singleton::mutex_;
  1. 静态局部变量方式(模拟静态内部类)
    C++没有静态内部类的概念,但可以通过命名空间或者嵌套类加静态局部变量的方式模拟实现。
class Singleton {
public:
    static Singleton& getInstance() {
        return Nested::instance;
    }

private:
    Singleton() {} // 私有构造函数
    ~Singleton() {} // 私有析构函数
    Singleton(const Singleton&) = delete; // 禁止拷贝构造
    Singleton& operator=(const Singleton&) = delete; // 禁止赋值运算符

    class Nested {
    public:
        static Singleton instance;
    };

    friend class Nested;
};

// 静态局部变量在第一次使用时初始化,且线程安全(C++11标准保证)
Singleton Singleton::Nested::instance;

以上展示了C++中实现单例模式的几种方式,每种方式都有其适用场景和优缺点,开发者应根据实际需求选择最合适的实现。

举报

相关推荐

C++实现单例模式

【C++】单例模式

单例模式(C++)

C++单例模式

【C++ 单例模式】

0 条评论