CrossFramework Library
|
00001 00006 #if defined(XBASE_INCLUDED_SCOPEDPTR_HPP) 00007 #else 00008 #define XBASE_INCLUDED_SCOPEDPTR_HPP 00009 00010 //------------------------------------------------------------ 00011 namespace XBase { 00013 00014 00015 template< typename T > 00016 class ScopedPtr 00017 { 00018 public: 00020 00021 00022 explicit ScopedPtr( T* aPtr = 0 ) 00023 : mPtr( aPtr ) 00024 { 00025 } 00027 00029 00030 00031 bool isNull()const 00032 { 00033 return mPtr == 0; 00034 } 00035 00037 bool isValid()const 00038 { 00039 return mPtr != 0; 00040 } 00041 00043 T& ref()const 00044 { 00045 XBASE_ASSERT( isValid() ); 00046 return *mPtr; 00047 } 00048 00053 T* get()const 00054 { 00055 return mPtr; 00056 } 00058 00060 00061 00062 void reset() 00063 { 00064 reset( 0 ); 00065 } 00066 00068 void reset( T* aPtr ) 00069 { 00070 T* ptr = mPtr; 00071 mPtr = 0; 00072 if ( ptr != 0 ) 00073 { 00074 delete ptr; 00075 } 00076 mPtr = aPtr; 00077 } 00079 00081 00082 00083 T& operator*()const 00084 { 00085 return ref(); 00086 } 00087 00089 T* operator->()const 00090 { 00091 XBASE_ASSERT( isValid() ); 00092 return get(); 00093 } 00095 00096 private: 00097 mutable T* mPtr; 00098 }; 00100 } 00101 //------------------------------------------------------------ 00102 #endif 00103 // EOF