Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __CSUTIL_SCOPEDPOINTER_H__
00019 #define __CSUTIL_SCOPEDPOINTER_H__
00020
00025 #include "csutil/noncopyable.h"
00026
00027 namespace CS
00028 {
00029 namespace Utility
00030 {
00031
00036 template<class T>
00037 class ScopedPointer : private NonCopyable
00038 {
00039 T* ptr;
00040 public:
00045 ScopedPointer (T* ptr = nullptr) : ptr (ptr) {}
00047 ~ScopedPointer() { delete ptr; }
00048
00053 void Reset (T* ptr = nullptr)
00054 {
00055 delete this->ptr;
00056 this->ptr = ptr;
00057 }
00059 void Invalidate() { Reset(); }
00061 bool IsValid() const { return ptr != (T*)nullptr; }
00062
00064 T* operator -> () const
00065 { return ptr; }
00066
00068 operator T* () const
00069 { return ptr; }
00070
00072 T& operator* () const
00073 { return *ptr; }
00074
00075 };
00076
00077 }
00078 }
00079
00080 #endif // __CSUTIL_SCOPEDPOINTER_H__