#ifndef __AUTOPTR_H__ #define __AUTOPTR_H__ // this class is NOT safe for array new's. It will not properly call // the destructor for each element and you will silently leak memory. // it does work for classes requiring no destructor however(base types) template class idAutoPtr { public: explicit idAutoPtr(type *ptr = 0) : mPtr(ptr) { } ~idAutoPtr() { delete mPtr; } type &operator*() const { return *mPtr; } type *operator->() const { return &**this; } type *get() const { return mPtr; } type *release() { type *ptr = mPtr; mPtr = NULL; return ptr; } void reset(type *ptr = NULL) { if (ptr != mPtr) delete mPtr; mPtr = ptr; } operator type*() { return get(); } private: // disallow copies idAutoPtr &operator=(idAutoPtr& ptr); idAutoPtr(idAutoPtr& ptr); type *mPtr; }; #endif