单例模式(C++)

介绍

单例模式,顾名思义,就是保证一个类只一个对象.

单例模式可以分为懒汉模式和饿汉模式两种:

  • 懒汉模式:不到万不得已不去实例化对象,也就是在第一次使用到类实例时才会去实例化一个对象.访问量较小时,采用懒汉模式,可以达到时间换空间的效果.
  • 饿汉模式: 在定义单例对象时就初始化.访问量较大时,或者可能访问的线程较多时,采用饿汉模式,可以实现更好的性能.以空间换时间.

示例

懒汉模式:

class Singleton {
public:
    static Singleton* GetInstance();

private:
    Singleton() {}
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
    
    static Singleton* instance_;
    static std::mutex mutex_;
};

Singleton* Singleton::instance_ = nullptr;
std::mutex Singleton::mutex_;

Singleton* Singleton::GetInstance() {
    if(instance_ == nullptr) {
        mutex_.lock();
        if(instance_ == nullptr) {
            instance_ = new Singleton();
        }
        mutex_.unlock();
    }
    
    return instance_;
}

饿汉模式:

class Singleton {
public:
    static Singleton* GetInstance();

private:
    Singleton() {}
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
    
    static Singleton* instance_;
};

Singleton* Singleton::instance_ = new Singleton();

Singleton* Singleton::GetInstance() {
    return instance_;
}
posted @   星星,风,阳光  阅读(180)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
点击右上角即可分享
微信分享提示