指针容器的清理

在STL中经常用容器存储指针,在存储后需要delete指针。

刚开始的时候我是这么用:

vector<path*> p;  
for(int i=0;i<100;i++)  
    p.push_back(new path);  
for(size_t i=0;i<100;i++)  
   {
     delete p[i];  
     p[i] = null;
   }

       或
         vector<path>::iterator it = p.begin();  
 for(;it!=p.end();++it)  
{  
   delete *it; 
    *it = null;
} 


后来 创建 vector的指针容器多了,就要大量写这么多的重复语句,只好自己写个专门的处理类。Clean

[cpp]  view plain copy
  1. #include <vector>
    #include <list>
    #include <queue>
    #include <map>

  2. class Clean{  
  3. public:  
  4.     template<class T >  
  5.     static void Clear(vector<T*> &c)  //引用
  6.     {  
  7.         size_t size= c.size();  
  8.         for (size_t i =0 ;i<size ;i++)  
  9.         {  
  10.             if(c[i])  
  11.             delete c[i];  
  12.             c[i] = null;
  13.         }  
  14.         c.clear();  
  15.     }  

  16.     template<class T >  
  17.     static void Clear(list<T*>& c)  
  18.     {  
  19.         size_t size= c.size();  
  20.         for (size_t i =0 ;i<size ;i++)  
  21.         {  
  22.             if(c[i])  
  23.                 delete c[i];  
  24.         }  
  25.         c.clear();  
  26.         c[i] = null;
  27.     }  

  28.     template<class T >  
  29.     static void Clear(deque<T*>& c)  
  30.     {  
  31.         size_t size= c.size();  
  32.         for (size_t i =0 ;i<size ;i++)  
  33.         {  
  34.             if(c[i])  
  35.            delete c[i];  
  36.             c[i] = null;
  37.         }  
  38.         c.clear();  
  39.     }  

  40.     template<class T,class _T>  
  41.     static void Clear(map<T,_T*>& c)  
  42.     {  
  43.         map<T,_T*>::iterator it = c.begin();  
  44.         for(;it!=c.end();it++)  
  45.         {  
  46.             delete it.second;  
  47.         }  
  48.     }  
  49.   
  50. };  

有个这个类,OK !

[cpp]  view plain copy
  1. vector<path*> p;  
  2. for(int i=0;i<100;i++)  
  3.     p.push_back(new path);  
  4. Clean::Clear<path>(p);  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值