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;
    }
  • 相关阅读:
    表、栈和队列
    POJ 1207 The 3n + 1 problem
    记录一个很低级的错误:command 'usr/local/cuda/bin/vncc' failed with exit status 2
    [转载]Benchmark和baseline的区别
    [转载]神经网络架构搜索(Neural Architecture Search)杂谈
    CNN常用图片分类网络
    [转载]OCR原理
    目标检测、实例分割学习
    [转载]上采样
    自动驾驶资料收集
  • 原文地址:https://www.cnblogs.com/SamRichard/p/3490480.html
Copyright © 2011-2022 走看看