00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef SMART_POINTER_H
00022 #define SMART_POINTER_H
00023
00024 template <class T>
00025 class SPtr
00026 {
00027 public:
00028 T *Ptr;
00029
00030 inline T *operator ->() {return Ptr;};
00031 inline T &operator *() {return *Ptr;};
00032 inline operator T *() {return Ptr;};
00033 inline operator void *() {return Ptr;};
00034 inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;};
00035 inline void operator =(T *N) {Ptr = N;};
00036 inline bool operator ==(T *lhs) const {return Ptr == lhs;};
00037 inline bool operator !=(T *lhs) const {return Ptr != lhs;};
00038 inline T*Get() {return Ptr;};
00039
00040 inline SPtr(T *Ptr) : Ptr(Ptr) {};
00041 inline SPtr() : Ptr(0) {};
00042 inline ~SPtr() {delete Ptr;};
00043 };
00044
00045 template <class T>
00046 class SPtrArray
00047 {
00048 public:
00049 T *Ptr;
00050
00051
00052 inline operator T *() {return Ptr;};
00053 inline operator void *() {return Ptr;};
00054 inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;};
00055
00056 inline void operator =(T *N) {Ptr = N;};
00057 inline bool operator ==(T *lhs) const {return Ptr == lhs;};
00058 inline bool operator !=(T *lhs) const {return Ptr != lhs;};
00059 inline T *Get() {return Ptr;};
00060
00061 inline SPtrArray(T *Ptr) : Ptr(Ptr) {};
00062 inline SPtrArray() : Ptr(0) {};
00063 inline ~SPtrArray() {delete [] Ptr;};
00064 };
00065
00066 #endif