Delete helper

harja 19.08.03 09:38

helper-template funktio deletelle

 Tekstiversio  Arvo: 2 (3 ääntä)  Äänestä: +  -
/* Esimerkki "delete-helperin" käytöstä
 * delete_helper auttaa objektien poistossa, jolloin sen voi
 * tehdä helposti iteraattorien läpi, esim for_each():lla
 * By Mikko Harju <maharj@utu.fi>
 */


#include <iostream>
#include <vector>
#include <algorithm>

using std::vector; using std::cout;
using std::for_each; using std::endl;

template<class T>
  struct delete_helper
{
     void operator()(T* ptr)
     {
        if(ptr != NULL) // Obsolete nykyisen standardin mukaan, varmuudeksi
          {
             delete ptr;
             ptr=NULL;
          }
     }
};


class CObject
{
 public:
   explicit CObject(int _t):t(_t) {}
   // vakio kopio, delete ja assignment-operaattori OK

 private:
   int t;
};

int main() {
   vector<CObject*> vec;
   for(int i=0;i<100;i++)
     {
        CObject *obj=new CObject(i);
        vec.push_back(obj);
     }

   // luotujen objektien poisto käy helposti:
   for_each(vec.begin(), vec.end(), delete_helper<CObject>());
}
 

ikkah 19:05 20.8.03 
Ei ehkä maailman hyödyllisin pätkä mutta hyvin tehty. Paitsi että inlinet ja tuo ~CObject on turhia. Mutta muuten mukavasti käytetty STL:ää.
harja 15:42 21.8.03 
Jep, se oli siellä vaan kosmeettisena lisänä. Otin sen nyt pois, jos se ärsyttää jotakuta :-) inlinet oli siellä vaan selventämässä hommaa kääntäjälle, mutta samapa se tosiaan on, joten otin pois.