qt实现C++设计模式之1_单例模式

1.单例模式介绍

     单例模式是设计模式比较常用的之一,该设计模式目的是在整个应用程序中单例类的实例有且仅有一个。

2.应用场景

     工具类,本身不存储数据,只用于一些通用功能实现。典型案例就是日志类,例如log4cplus

     资源管理,例如打印机管理,同一时刻最好只有一个应用程序操作。

3.实现要点

     构造函数私有,这样你就不能用new来实例化类了。

     拷贝构造函数和=号操作符重载设置为私有,这样就无法进行类的复制。

     类的初始化时间,有所谓的懒汉、饿汗策略。懒汉就是在使用时候进行类的实例化。饿汉就是事先申明好类的实例,调用时直接返回即可。对非实时系统而言都可以。

     线程安全,主要是多线程同时获取实例时,有极小概率会生成两个实例,这个时候就要考虑进行加锁了。为了简化实现,可以使用函数内静态变量来实现。函数内静态变量,在函数第一次调用时才进行初始化,可以从编译角度来实现线程安全。看下汇编代码就会发现函数内静态变量初始化时,是加锁的。

4.代码

    

 1 #ifndef CSINGLETON_H
 2 #define CSINGLETON_H
 3 
 4 
 5 class CSingleton
 6 {
 7 public:
 8     static CSingleton* getInstance();
 9 
10 private:
11     //构造函数、复制构造函数、=操作符设置为私有
12     CSingleton();
13     CSingleton(const CSingleton& c);
14     CSingleton& operator=(const CSingleton& c);
15 };
16 
17 #endif // CSINGLETON_H
 1 #include "csingleton.h"
 2 
 3 
 4 CSingleton::CSingleton()
 5 {
 6 
 7 }
 8 
 9 CSingleton::CSingleton(const CSingleton &c)
10 {
11 
12 }
13 
14 CSingleton *CSingleton::getInstance()
15 {
16     static CSingleton s_instance;
17     return &s_instance;
18 }
19 
20 
21 CSingleton &CSingleton::operator=(const CSingleton &c)
22 {
23     return *this;
24 }

猜你喜欢

转载自www.cnblogs.com/yankeyan/p/9617489.html