1 #ifndef GINTENLIB_INCLUDED_DELETER_HPP_
2 #define GINTENLIB_INCLUDED_DELETER_HPP_
6 <gintenlib/deleter.hpp>
8 deleter : 単純な delete 演算子と等価なファンクタ
9 typed_deleter : 型の指定された deleter
10 dummy_deleter : 何もしないファンクタ
11 typed_dummy_deleter : 型が指定されてるけど何もしないファンクタ
14 ポインタ delete 用の関数オブジェクトです。それ以外の何物でもありません。
15 deleter は boost::checked_delete を呼んでますが、この中では単に delete 演算子を呼んでいるだけ。
16 dummy_deleter は delete 演算子すら呼ばない、単なるプレースホルダーとして機能します。
17 それぞれ型付バージョンもあり、それらは unary_function の条件を満たしています。
22 #include <boost/checked_delete.hpp>
26 namespace deleters_ // ADL 対策
28 // ただ単に delete するだけのファンクタ
31 typedef void result_type;
34 result_type operator()( T* p ) const throw()
36 boost::checked_delete( p );
43 struct typed_deleter : std::unary_function<T*, void>
45 void operator()( T* p ) const throw()
47 boost::checked_delete( p );
50 }; // struct typed_deleter<T>
55 typedef void result_type;
58 result_type operator()( T* ) const throw() {}
60 }; // struct dummy_deleter
62 // 型束縛されてるけど何もしない deleter
64 struct typed_dummy_deleter : std::unary_function<T*, void>
66 void operator()( T* ) const throw() {}
68 }; // struct typed_dummy_deleter<T>
70 } // namespace deleters_
73 using namespace deleters_;
75 } // namespace gintenlib
77 #endif // #ifndef GINTENLIB_INCLUDED_DELETER_HPP_