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