CrossFramework Library

XBase/ScopedPtr.hpp

説明を見る。
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
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 マクロ定義