CArraySelfDestroyPointer.h

Go to the documentation of this file.
00001 #ifndef _CARRAYSELFDESTROYPOINTER
00002 #define _CARRAYSELFDESTROYPOINTER
00003 #include "../include/uses-declarations.h"/*A pointer which stores along with itself, if it
00004   destroys the element it points to
00005 */
00006 
00007 template<class T>
00008 class CArraySelfDestroyPointer{
00010   mutable bool mIsSelfDestroyer;
00012  protected:
00013   T* mPointer;
00015 public:
00017   void resetWithoutDeleting();
00019   inline bool isSelfDestroyer()const;
00021   inline void setIsSelfDestroyer(bool inisSelfDestroyer=true)const;
00023   void unsetIsSelfDestroyer()const;
00025   T* operator= (T* inPointer);
00027   T& operator*();
00029   T const& operator*()const;
00031   T* operator -> ();
00033   T const* operator -> ()const;
00035   ~CArraySelfDestroyPointer();
00037   CArraySelfDestroyPointer(T*,
00038           bool = true);
00040   CArraySelfDestroyPointer(const CArraySelfDestroyPointer<T>& 
00041           inSelfDestroyPointer);
00043   CArraySelfDestroyPointer();
00045   operator bool()const;
00047   operator T*()const;
00048 };
00049 
00050 
00052 template<class T>
00053 void CArraySelfDestroyPointer<T>::resetWithoutDeleting(){
00054   mPointer=0;
00055 }
00056 
00057 template<class T>
00058 T* CArraySelfDestroyPointer<T>::operator=(T* inPointer){
00059 
00060   if(mIsSelfDestroyer){
00061     delete[] mPointer;
00062   }
00063   return mPointer=inPointer;
00064 }
00065 
00066 template<class T>
00067 T const& CArraySelfDestroyPointer<T>::operator *()const{
00068   return *mPointer;
00069 }
00070 
00071 template<class T>
00072 T const* CArraySelfDestroyPointer<T>::operator ->()const{
00073   return mPointer;
00074 }
00075 
00076 template<class T>
00077 T& CArraySelfDestroyPointer<T>::operator *(){
00078   return *mPointer;
00079 }
00080 
00081 template<class T>
00082 T* CArraySelfDestroyPointer<T>::operator ->(){
00083   return mPointer;
00084 }
00085 
00086 template<class T>
00087 CArraySelfDestroyPointer<T>::CArraySelfDestroyPointer(T* inPointer,
00088               bool inIsSelfDestroyer):
00089   mPointer(inPointer),
00090   mIsSelfDestroyer(inIsSelfDestroyer)
00091 {
00092 }
00094 template<class T>
00095 CArraySelfDestroyPointer<T>::CArraySelfDestroyPointer(const CArraySelfDestroyPointer<T>& in):
00096   mPointer(in.mPointer),
00097   mIsSelfDestroyer(in.mIsSelfDestroyer)
00098 {
00099 };
00100 
00101 template<class T>
00102 CArraySelfDestroyPointer<T>::CArraySelfDestroyPointer():
00103   mPointer(0),
00104   mIsSelfDestroyer(true)
00105 {
00106 }
00107 
00108 template<class T>
00109 CArraySelfDestroyPointer<T>::~CArraySelfDestroyPointer()
00110 {
00111   if(mIsSelfDestroyer){
00112 
00113     delete[] mPointer;
00114   }
00115 }
00116 
00117 
00118 template<class T>
00119 void CArraySelfDestroyPointer<T>::setIsSelfDestroyer(bool inIsSelfDestroyer)const{
00120   mIsSelfDestroyer= inIsSelfDestroyer;
00121 };
00122 
00123 template<class T>
00124 bool CArraySelfDestroyPointer<T>::isSelfDestroyer()const{
00125   return mIsSelfDestroyer;
00126 };
00127 
00128 template<class T>
00129 void CArraySelfDestroyPointer<T>::unsetIsSelfDestroyer()const{
00130   mIsSelfDestroyer=0;
00131 };
00132 
00133 template<class T>
00134 CArraySelfDestroyPointer<T>::operator bool()const{
00135   return mPointer;
00136 };
00137 
00138 template<class T>
00139 CArraySelfDestroyPointer<T>::operator T*()const{
00140   return mPointer;
00141 };
00142 #endif

Generated on Wed Jan 7 00:30:36 2009 for Gift by  doxygen 1.5.6