OSDN Git Service

removed .svn
[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_