4 struct heap_memory_free_policy
7 void operator()( const T* AMemory ) const
10 ::HeapFree( ::GetProcessHeap(), 0, AMemory );
14 struct local_memory_free_policy
16 template< typename T >
17 void operator()( const T* AMemory ) const
20 ::LocalFree( AMemory );
24 struct co_task_memory_free_policy
26 template< typename T >
27 void operator()( const T* AMemory ) const
30 ::CoTaskMemFree( AMemory );
34 template< typename T,class TFreePolicy >
41 base_memory( T* AMemory = NULL )
42 : FMemory( AMemory ) {}
44 virtual ~base_memory( void )
54 void reset( T* AMemory = NULL )
56 if( AMemory != FMemory )
59 TFreePolicy( FMemory );
77 template< typename T >
78 class heap_memory : public base_memory< T,
79 heap_memory_free_policy >
82 heap_memory( T* AMemory = NULL )
83 : base_memory< T, heap_memory_free_policy >( AMemory )
86 template< typename T >
87 class local_memory : public base_memory< T,
88 local_memory_free_policy >
91 local_memory( T* AMemory = NULL )
92 : base_memory< T, local_memory_free_policy >( AMemory )
95 template< typename T >
96 class co_task_memory : public base_memory< T, co_task_memory_free_policy >
99 co_task_memory( T* AMemory = NULL )
100 : base_memory< T, co_task_memory_free_policy >( AMemory )
104 struct handle_deleter {
105 typedef HANDLE pointer;
106 void operator ()(HANDLE handle) {
107 if (handle != INVALID_HANDLE_VALUE) {
113 typedef std::unique_ptr<HANDLE,handle_deleter> handle_holder;
117 template <class COM_SMART_PTR > inline void safe_release(COM_SMART_PTR& ptr)