OSDN Git Service

memberwise_swap を追加
[gintenlib/gintenlib.git] / gintenlib / destructor.hpp
1 #ifndef GINTENLIB_INCLUDED_DESTRUCTOR_HPP_
2 #define GINTENLIB_INCLUDED_DESTRUCTOR_HPP_
3
4 /*
5
6       <gintenlib/destructor.hpp>
7
8   destructor : デストラクタ呼び出しと等価なファンクタ
9   typed_destructor : 型の指定された destructor
10
11   機能:
12     デストラクタ呼び出し用の関数オブジェクトです。それ以外の何物でもありません。
13     deleter は boost::checked_delete を呼んでますが、この中では単に delete 演算子を呼んでいるだけ。
14     dummy_deleter は delete 演算子すら呼ばない、単なるプレースホルダーとして機能します。
15     それぞれ型付バージョンもあり、それらは unary_function の条件を満たしています。
16
17 */
18
19 #include <functional>
20 #include <boost/checked_delete.hpp>
21
22 namespace gintenlib
23 {
24   // デストラクタを呼び出すファンクタ
25   struct destructor
26   {
27     typedef void result_type;
28     
29     template<typename T>
30     void operator()( T* p ) const
31     {
32       p->~T();
33     }
34     
35   };  // struct destructor
36   
37   // 型の束縛された destructor
38   template<typename T>
39   struct typed_destructor
40     : std::unary_function<T*, void>
41   {
42     void operator()( T* p ) const
43     {
44       destructor().operator()<T>( p );
45     }
46   
47   };  // struct typed_destructor<T>
48
49 }   // namespace gintenlib
50
51 #endif  // #ifndef GINTENLIB_INCLUDED_DESTRUCTOR_HPP_