单件模式是设计模式中很常用的一种模式。尽管本人是个菜鸟,经验也不足,但还是喜欢把学到的应用到工作项目当中。废话不多说了
以前在书上看过一些单件模式方面的资料,没过脑子,就直接把代码敲进去。
一直也都没有仔细的考虑,最近才发现上图的代码,在一下情况下就会出现异常
SingleTon* pSingleTon = SingleTon::GetInstance();
...
delete pSingleTon; // 问题就在这句
当释放 pSingleTon 静态内存空间时,程序出现异常,原因是由于 SingleTon 的析构函数里面有 delete pInstance; 这句,因为 pInstance 也是 SingleTon 类型指针,因此会出现死循环,不停地调用 ~SingleTon();
那么我该如何正确的删除静态实例,清除其所占用内存空间; 仔细想想,我们知道,程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。利用这个特征,我们可以在单例类中定义一个这样的静态成员实例(而非指针),由于是静态的成员,还必须在类外部定义,否则连接错误;还有一种方法是在 GetInstance() 函数中定义。修改为如下:
这样,代码也很简洁,析构也省了,错误没有了,世界清净多了。