单例模式的自动释放

本文探讨了在程序退出时如何避免单例模式引发的'假内存泄漏',提出了三种方法:嵌套类+静态对象、atexit + 静态对象以及atexit + pthread_once。前两者为跨平台解决方案,后者则涉及多线程安全性,但可能不适用于所有平台。
摘要由CSDN通过智能技术生成

一般来说,程序退出的时候,所有的资源都被回收,但是在使用检测内存泄露的工具比如valgrind时会被检测出来,可以理解为这是一种“假的内存泄漏”。为此,这里分别使用三种方法来避免这个问题。

方案一:嵌套类+静态对象

代码实现:

  1 #include <iostream>                                                                                           
  2 using std::cout;
  3 using std::endl;
  4 
  5 class Signalton
  6 {
   
  7     class AutoRelease
  8     {
   
  9     public:
 10         AutoRelease()
 11         {
   
 12             cout<<"AutoRelease()"<<endl;
 13         }
 14 
 15         ~AutoRelease()
 16         {
   
 17             if(_pInstance)
 18             {
   
 19                 delete _pInstance;
 20                 cout<<"~AutoRelease()"<<endl;
 21             }
 22         }
 23     };
 24 public:
 25     static Signalton * getInstance()
 26     {
   
 27         if(_pInstance==nullptr)
 28         {
   
 29             _pInstance=new Signalton();
 30         }
 31         return _pInstance;
 32     }
 33 
 34     void destroy()
 35     {
   
 36         if(_pInstance)
 37             delete _pInstance;
 38     }
 39 
 40     void print()const
 41     {
   
 42
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值