C++之单例模式 (Singleton)
2013-12-25 13:30
120 查看
· 一个类仅有一个实例,通过全局访问点获取之
· 将包括拷贝构造函数在内的所有构造函数私有化,防止类的使用者从类的外部创建对象
· 公有静态成员函数getInstance()是获取对象实例的唯一渠道
· 饿汉式:无论用不用,程序启动即创建
· 懒汉式:用的时候创建,不用了即销毁
永不销毁
引用计数
线程安全
饿汉式代码示例:
懒汉式代码示例:
· 将包括拷贝构造函数在内的所有构造函数私有化,防止类的使用者从类的外部创建对象
· 公有静态成员函数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; }
相关文章推荐
- Singleton模式的C++实现研究
- C++完美实现Singleton模式
- C++设计模式之Singleton模式
- 设计模式C++实现(5)——单例模式(Singleton)
- [C++设计模式] singleton 单例模式
- 设计模式——单键模式(singleton)C++实现
- Singleton模式的C++实现研究(示例代码)
- C++完美实现Singleton模式
- Singleton 单例模式学习 (c++)实现
- (Boolan)C++设计模式 <九> ——单例模式(Singleton)和享元模式(FlyWeight)
- c++ 设计模式(三)singleton 单例模式
- C++实现Creational - Singleton模式
- C++用多种方式实现Singleton单例模式
- C++设计模式-Singleton
- C++ 单例(singleton)模式实现
- 如何用C++写一个Singleton 单例模式
- 用C++实现单例模式3——如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton
- 设计模式C++ 笔记一 创建型模式(Factory、abstract factory、singleton)
- Singleton模式的C++实现研究(示例代码)
- c++-单例模式Singleton