--- rxvt-unicode/src/rxvtvec.h 2003/11/24 17:28:08 1.1 +++ rxvt-unicode/src/rxvtvec.h 2003/11/24 19:52:16 1.2 @@ -32,4 +32,47 @@ return first; } +template +struct auto_ptr { + T *p; + + auto_ptr() : p(0) { } + auto_ptr(T *a) : p(a) { } + + template + auto_ptr(auto_ptr &a) + { + p = a.p; + a.p = 0; + } + + // void because it makes sense in our context + void operator =(T *a) + { + delete p; + p = a; + } + + template + void operator =(auto_ptr &a) + { + *this = a.p; + a.p = 0; + } + + operator T *() const { return p; } + + T *operator ->() const { return p; } + T &operator *() const { return *p; } + + T *get () + { + T *r = p; + p = 0; + return r; + } +}; + +typedef auto_ptr auto_str; + #endif