C++ 单件模式学习笔记

单件模式是设计模式中很常用的一种模式。尽管本人是个菜鸟,经验也不足,但还是喜欢把学到的应用到工作项目当中。废话不多说了

以前在书上看过一些单件模式方面的资料,没过脑子,就直接把代码敲进去。

 

 

一直也都没有仔细的考虑,最近才发现上图的代码,在一下情况下就会出现异常

SingleTon*  pSingleTon = SingleTon::GetInstance();

...

delete pSingleTon;  // 问题就在这句

当释放 pSingleTon 静态内存空间时,程序出现异常,原因是由于 SingleTon   的析构函数里面有 delete pInstance; 这句,因为 pInstance 也是 SingleTon 类型指针,因此会出现死循环,不停地调用 ~SingleTon();

 

那么我该如何正确的删除静态实例,清除其所占用内存空间; 仔细想想,我们知道,程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。利用这个特征,我们可以在单例类中定义一个这样的静态成员实例(而非指针),由于是静态的成员,还必须在类外部定义,否则连接错误;还有一种方法是在 GetInstance() 函数中定义。修改为如下:

 

这样,代码也很简洁,析构也省了,错误没有了,世界清净多了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值