zoukankan      html  css  js  c++  java
  • C++之单例模式 (Singleton)

    · 一个类仅有一个实例,通过全局访问点获取之

    · 将包括拷贝构造函数在内的所有构造函数私有化,防止类的使用者从类的外部创建对象

    · 公有静态成员函数getInstance()是获取对象实例的唯一渠道

    · 饿汉式:无论用不用,程序启动即创建

    · 懒汉式:用的时候创建,不用了即销毁

    永不销毁

    引用计数

    线程安全

    饿汉式代码示例:

    #include <iostream>
    using namespace std;
    
    class Config
    {
    private:
        Config(){}
        Config(const Config& that){}
    private:
        static Config s_instance;
    public:
        static Config& getInstance()
        {
            return s_instance;
        }
    };
    
    Config Config::s_instance;
    
    int main()
    {
        Config& s = Config::getInstance(); //唯一获取对象的途径
        return 0;
    }

    懒汉式代码示例:

    #include <iostream>
    using namespace std;
    
    class Config
    {
    private:
        Config(){}
        Config(const Config& that){}
        ~Config()
        {
            s_instance = NULL;
        }
    private:
        static Config* s_instance;
        static size_t s_counter;
        static pthread_mutex_t s_mutex;
    public:
        static Config& getInstance()
        {
            if(!s_instance)    //先判断一下,会提高读写锁的性能
            {
                pthread_mutex_lock(&s_mutex);
                if(!s_instance)
                    s_instance = new Config; //静态函数可以调用非静态成员
                pthread_mutex_unlock(&s_mutex);
            }
            ++s_counter;
            return *s_instance;
        }
        void releaseInstance()
        {
            if(s_counter && --s_counter == 0)
                delete this;
        }
    };
    //静态成员初始化
    Config* Config::s_instance =  NULL;
    size_t Config::s_counter = 0;
    pthread_mutex_t Config::s_mutex = PTHREAD_MUTEX_INITIALIZER;
    
    int main()
    {
        Config& s = Config::getInstance(); //唯一获取对象的途径
        s.releaseInstance();
        return 0;
    }
  • 相关阅读:
    canvas
    学习总结
    后台管理人员项目,添加和查询的思路
    写了项目的一些心得
    学了一丢丢的正则皮毛
    已学的前端存储(学生)
    $.ajax()方法详解即自己遇到问题(新手)
    C#中 decimal 的四舍五入
    自己写一个C#数据结构:用List<T>实现一个简单的Stack
    【转】在CentOS 6.X上部署C# 开发环境
  • 原文地址:https://www.cnblogs.com/SamRichard/p/3490480.html
Copyright © 2011-2022 走看看