在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
- #include <vector>
#include <list>
#include <queue>
#include <map>
-
- class Clean{
- public:
- template<class T >
- static void Clear(vector<T*> &c) //引用
- {
- size_t size= c.size();
- for (size_t i =0 ;i<size ;i++)
- {
- if(c[i])
- delete c[i];
- c[i] = null;
- }
- c.clear();
- }
-
- template<class T >
- static void Clear(list<T*>& c)
- {
- size_t size= c.size();
- for (size_t i =0 ;i<size ;i++)
- {
- if(c[i])
- delete c[i];
- }
- c.clear();
- c[i] = null;
- }
-
- template<class T >
- static void Clear(deque<T*>& c)
- {
- size_t size= c.size();
- for (size_t i =0 ;i<size ;i++)
- {
- if(c[i])
- delete c[i];
- c[i] = null;
- }
- c.clear();
- }
-
- template<class T,class _T>
- static void Clear(map<T,_T*>& c)
- {
- map<T,_T*>::iterator it = c.begin();
- for(;it!=c.end();it++)
- {
- delete it.second;
- }
- }
- };
有个这个类,OK !
- vector<path*> p;
- for(int i=0;i<100;i++)
- p.push_back(new path);
- Clean::Clear<path>(p);