00001 #ifndef __POINTERS_H__ 00002 #define __POINTERS_H__ 00003 00004 #include "../debug/DebugUtils.h" 00005 00006 namespace oasys { 00007 00016 template <typename _Class> 00017 class ScopePtr { 00018 public: 00019 ScopePtr() : ptr_(0) {} 00020 ScopePtr(_Class* obj) : ptr_(obj) {} 00021 ~ScopePtr() { if(ptr_) { delete ptr_; ptr_ = 0; } } 00022 00023 _Class& operator*() const { return *ptr_; } 00024 _Class* operator->() const { return ptr_; } 00025 00030 ScopePtr& operator=(_Class* ptr) { 00031 ASSERT(ptr_ == NULL); 00032 ptr_ = ptr; 00033 return *this; 00034 } 00035 00041 _Class*& ptr() { return ptr_; } 00042 00047 ScopePtr& operator=(const ScopePtr&); 00048 00049 private: 00050 _Class* ptr_; 00051 }; 00052 00056 class ScopeMalloc { 00057 public: 00058 ScopeMalloc(void* ptr = 0) : ptr_(ptr) {} 00059 00060 ~ScopeMalloc() { 00061 if (ptr_) { 00062 free(ptr_); 00063 ptr_ = 0; 00064 } 00065 } 00066 00071 ScopeMalloc& operator=(void* ptr) { 00072 ASSERT(ptr_ == NULL); 00073 ptr_ = ptr; 00074 return *this; 00075 } 00076 00082 void*& ptr() { return ptr_; } 00083 00088 ScopeMalloc& operator=(const ScopeMalloc&); 00089 00090 private: 00091 void* ptr_; 00092 }; 00093 00094 00095 } // namespace oasys 00096 00097 #endif //__POINTERS_H__