您的位置:首页 > 编程语言 > C语言/C++

C++之单例模式 (Singleton)

2013-12-25 13:30 120 查看
· 一个类仅有一个实例,通过全局访问点获取之

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

· 公有静态成员函数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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: