C++ 单件模式学习笔记
2011-08-22 23:20
253 查看
单件模式是设计模式中很常用的一种模式。尽管本人是个菜鸟,经验也不足,但还是喜欢把学到的应用到工作项目当中。废话不多说了
以前在书上看过一些单件模式方面的资料,没过脑子,就直接把代码敲进去。
一直也都没有仔细的考虑,最近才发现上图的代码,在一下情况下就会出现异常
SingleTon* pSingleTon = SingleTon::GetInstance();
...
delete pSingleTon; // 问题就在这句
当释放 pSingleTon 静态内存空间时,程序出现异常,原因是由于 SingleTon 的析构函数里面有 delete pInstance; 这句,因为 pInstance 也是 SingleTon 类型指针,因此会出现死循环,不停地调用 ~SingleTon();
那么我该如何正确的删除静态实例,清除其所占用内存空间; 仔细想想,我们知道,程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。利用这个特征,我们可以在单例类中定义一个这样的静态成员实例(而非指针),由于是静态的成员,还必须在类外部定义,否则连接错误;还有一种方法是在 GetInstance() 函数中定义。修改为如下:
这样,代码也很简洁,析构也省了,错误没有了,世界清净多了。
以前在书上看过一些单件模式方面的资料,没过脑子,就直接把代码敲进去。
一直也都没有仔细的考虑,最近才发现上图的代码,在一下情况下就会出现异常
SingleTon* pSingleTon = SingleTon::GetInstance();
...
delete pSingleTon; // 问题就在这句
当释放 pSingleTon 静态内存空间时,程序出现异常,原因是由于 SingleTon 的析构函数里面有 delete pInstance; 这句,因为 pInstance 也是 SingleTon 类型指针,因此会出现死循环,不停地调用 ~SingleTon();
那么我该如何正确的删除静态实例,清除其所占用内存空间; 仔细想想,我们知道,程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。利用这个特征,我们可以在单例类中定义一个这样的静态成员实例(而非指针),由于是静态的成员,还必须在类外部定义,否则连接错误;还有一种方法是在 GetInstance() 函数中定义。修改为如下:
这样,代码也很简洁,析构也省了,错误没有了,世界清净多了。
相关文章推荐
- 设计模式C++学习笔记之十八(Visitor访问者模式)
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- 设计模式C++学习笔记之八(Adapter适配器模式)
- 设计模式C++学习笔记之十二(Command命令模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- C++学习笔记(二十六)设计模式学习之单例模式
- 设计模式C++学习笔记之十七(Chain of Responsibility责任链模式)
- 设计模式C++学习笔记之十(Builder建造者模式)
- 金庸小说考试之模板方法模式学习笔记[C++版]
- 【设计模式】学习笔记7:单件模式(Singleton)
- 设计模式C++学习笔记之七(AbstractFactory抽象工厂模式)
- 设计模式C++学习笔记之十八(Visitor访问者模式)
- 设计模式学习笔记c++版——单例模式
- 设计模式C++学习笔记之四(Multition多例模式)
- 设计模式C++学习笔记之十九(State状态模式)
- 设计模式C++学习笔记之五(Factory Method工厂方法模式)
- 设计模式C++学习笔记之十五(Composite组合模式)
- 设计模式C++学习笔记之一(Strategy策略模式)
- 设计模式C++学习笔记之十八(Visitor访问者模式)
- C++学习笔记(二十八)工厂模式、简单工厂模式与抽象工厂模式