00001 #ifndef s11n_POINTER_CLEANER_H_INCLUDED
00002 #define s11n_POINTER_CLEANER_H_INCLUDED
00003
00004
00005
00006
00007
00008
00009
00010 #include <algorithm>
00011 #include "functor.h"
00012
00013 namespace s11n
00014 {
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 template <typename T>
00025 class pointer_cleaner
00026 {
00027 public:
00028 typedef T value_type;
00029
00030
00031
00032
00033
00034 pointer_cleaner() {}
00035
00036
00037
00038
00039 ~pointer_cleaner()
00040 {
00041 std::for_each( this->m_list.begin(),
00042 this->m_list.end(),
00043 object_deleter()
00044 );
00045 }
00046
00047
00048
00049
00050
00051
00052 void add( value_type * o ) { this->m_list.push_back( o ); }
00053
00054 private:
00055 struct object_deleter
00056 {
00057 template <typename X>
00058 void operator()( const X * t )
00059 {
00060 delete( t );
00061 }
00062 };
00063
00064 pointer_cleaner( const pointer_cleaner & );
00065 pointer_cleaner & operator=( const pointer_cleaner & );
00066 typedef std::list<value_type *> list_type;
00067 list_type m_list;
00068 };
00069
00070 }
00071
00072 #endif // s11n_POINTER_CLEANER_H_INCLUDED