c++单例模式初探
2015-10-05 13:43
274 查看
在cocos2d-x中看到了大量的单例模式,于是学习了一下c++的单例模式。
单例模式是什么?
只能产生一个实例的类就是单例模式。我们设计一个类,有时只需要使用它一次,比如一台电脑只能有一个显示器,日志的输出,窗口只能有一个,于是我们通过单例模式来实现它,而非全局变量,因为全局变量会影响封装性,不能保证程序不会修改它。
c++单例模式如何实现?
实现单例模式要注意以下几点:
1.私有化构造函数,提供公有getInstance()方法访问单例。
2.利用程序在结束的时候,系统会自动析构所有全局变量(包括静态变量),我们创建一个静态成员变量,它的唯一作用就是在结束时析构单例。
以下是实现代码:
class CSingleton
{
private:
CSingleton()
{
}
static CSingleton *m_pInstance;
class CGarbo //它的唯一工作就是在析构函数中删除CSingleton的实例
{
public:
~CGarbo()
{
if(CSingleton::m_pInstance)
delete CSingleton::m_pInstance;
}
};
static CGarbo Garbo; //定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL) //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pInstance;
}
};
但是这样做代码量太大,不令人满意,于是有人又通过局部静态变量,实现如下:
class CSingleton
{
private:
CSingleton() //构造函数是私有的
{
}
CSingleton(const CSingleton &);
CSingleton & operator = (const CSingleton &);
public:
static CSingleton & GetInstance()
{
static CSingleton instance; //局部静态变量
return instance;
}
};
拷贝构造函数和赋值运算符的重载只声明不实现,是为了应对类拷贝的问题,这样使用类拷贝的时候系统会报错(私有)。
单例模式的优缺点?
优点:简单易用,一个全局变量可以与很多对象交互,降低创建多个对象引起的内存管理风险。
缺点:单例模式提供的全局访问点是很危险的(原因参考设计模式),一般在程序结束前内存都得不到释放。所以必须慎用单例。
单例模式是什么?
只能产生一个实例的类就是单例模式。我们设计一个类,有时只需要使用它一次,比如一台电脑只能有一个显示器,日志的输出,窗口只能有一个,于是我们通过单例模式来实现它,而非全局变量,因为全局变量会影响封装性,不能保证程序不会修改它。
c++单例模式如何实现?
实现单例模式要注意以下几点:
1.私有化构造函数,提供公有getInstance()方法访问单例。
2.利用程序在结束的时候,系统会自动析构所有全局变量(包括静态变量),我们创建一个静态成员变量,它的唯一作用就是在结束时析构单例。
以下是实现代码:
class CSingleton
{
private:
CSingleton()
{
}
static CSingleton *m_pInstance;
class CGarbo //它的唯一工作就是在析构函数中删除CSingleton的实例
{
public:
~CGarbo()
{
if(CSingleton::m_pInstance)
delete CSingleton::m_pInstance;
}
};
static CGarbo Garbo; //定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL) //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pInstance;
}
};
但是这样做代码量太大,不令人满意,于是有人又通过局部静态变量,实现如下:
class CSingleton
{
private:
CSingleton() //构造函数是私有的
{
}
CSingleton(const CSingleton &);
CSingleton & operator = (const CSingleton &);
public:
static CSingleton & GetInstance()
{
static CSingleton instance; //局部静态变量
return instance;
}
};
拷贝构造函数和赋值运算符的重载只声明不实现,是为了应对类拷贝的问题,这样使用类拷贝的时候系统会报错(私有)。
单例模式的优缺点?
优点:简单易用,一个全局变量可以与很多对象交互,降低创建多个对象引起的内存管理风险。
缺点:单例模式提供的全局访问点是很危险的(原因参考设计模式),一般在程序结束前内存都得不到释放。所以必须慎用单例。
相关文章推荐
- c++装饰模式
- 自己用C语言写dsPIC, PIC24单片机的serial bootloader
- C++:set_union is not a member of std;
- c++11中的lambda表达式
- 转:VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
- C++ 构造函数与析构函数(五)
- 面试复习(C++)之直接插入排序
- C/C++变量命名规则
- C++ 基础知识点 九 第10章 多态性与虚函数
- C++ 基础知识点 八 第9章 继承性与派生类
- C++刷称号——2707: 素数与要素
- C++ 基础知识点 七 第8章 类和对象的创建
- C++ 基础知识点 五 第6章 指针、引用和动态空间管理
- Leetcode NO.274 H-Index
- kmp算法实现(C++版)
- C/C++中的const--常量指针与指针常量
- C/C++:用数组构造队列。
- Leetcode NO.53 Maximum Subarray
- C/C++ const变量的修改
- 面试复习(C++)之直接选择排序