00001 #ifndef _MY_OPointer_ 00002 #define _MY_OPointer_ 00003 00004 00008 template<class Type> 00009 class OPointer 00010 { 00011 private: 00012 Type *_ptr; 00013 protected: 00014 00015 00016 00017 00018 public: 00019 OPointer(){_ptr=NULL;} 00020 OPointer(Type *p){_ptr=p;} 00021 ~OPointer() 00022 { 00023 if (_ptr) 00024 { 00025 //printf("Opointer Deleting address %p\n",_ptr); 00026 delete _ptr; 00027 } 00028 } 00029 Type* operator -> () 00030 { 00031 assert(_ptr); 00032 return _ptr; 00033 } 00034 Type& operator *() const {return *_ptr;} 00035 void operator = (Type *p){_ptr = p;} 00036 00037 //operator Type*(){return _ptr;} 00038 operator Type*& (){return _ptr;} 00039 operator Type* () const {return _ptr;} 00040 00041 //operator void*& (){return _ptr;} 00042 //operator long int() const {return (long int) _ptr;} 00043 //operator bool () const {return _ptr != NULL;} 00044 Type* ptr(){return _ptr;} 00045 }; 00046 00047 00048 #endif