template< class T >
struct Handle
{
typedef T subtype;
T* item;
Handle() : item( NULL ){}
Handle( T* v ) : item( v ){ if( item ) item->Acquire(); }
Handle( const Handle& h ) : item( h.item ){ if( item ) item->Acquire(); }
~Handle(){ if( item ){ item->Release(); item = NULL; } }
Handle& operator = ( const Handle& h ){ if( item ) item->Release(); item = h.item; if( item ) item->Acquire(); return *this; }
T* operator -> () const { return item; }
T& operator * () const { return *item; }
operator T* () const { return item; }
};
Comments