C++怎么实现单例模式

发布时间:2022-01-13 17:56:31 作者:iii
来源:亿速云 阅读:182

C++怎么实现单例模式

单例模式(Singleton Pattern)是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式有多种方式,本文将介绍几种常见的实现方法。

1. 懒汉式单例模式

懒汉式单例模式是指在第一次使用时才创建实例。这种方式可以避免不必要的资源消耗,但需要考虑线程安全问题。

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

    // 删除拷贝构造函数和赋值操作符
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

private:
    Singleton() {}  // 私有构造函数
};

优点:

缺点:

2. 饿汉式单例模式

饿汉式单例模式是指在程序启动时就创建实例。这种方式简单直接,但可能会造成资源浪费。

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

    // 删除拷贝构造函数和赋值操作符
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

private:
    Singleton() {}  // 私有构造函数

    static Singleton instance;
};

// 在类外初始化静态成员变量
Singleton Singleton::instance;

优点:

缺点:

3. 双重检查锁定单例模式

双重检查锁定(Double-Checked Locking)是一种在多线程环境下保证单例模式线程安全的方法。

#include <mutex>

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

    // 删除拷贝构造函数和赋值操作符
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

private:
    Singleton() {}  // 私有构造函数

    static Singleton* instance;
    static std::mutex mutex;
};

// 在类外初始化静态成员变量
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex;

优点:

缺点:

总结

在C++中实现单例模式有多种方式,每种方式都有其优缺点。懒汉式单例模式适用于大多数场景,尤其是在C++11及以上标准中,局部静态变量的线程安全性得到了保证。饿汉式单例模式简单直接,但可能会浪费资源。双重检查锁定单例模式适用于多线程环境,但实现较为复杂。

根据具体需求选择合适的实现方式,可以有效地管理资源并确保程序的正确性。

推荐阅读:
  1. c++单例模式 ---超详细
  2. C++单例模式

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:C++怎么实现Singleton模式

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》