From 9d72b47984f61d0c2bb724fa7bf6d54f988384c9 Mon Sep 17 00:00:00 2001 From: michi_cc Date: Sat, 4 Feb 2012 13:28:35 +0000 Subject: (svn r23880) -Add: A simple smart pointer. --- src/core/alloc_type.hpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/core') diff --git a/src/core/alloc_type.hpp b/src/core/alloc_type.hpp index 6caaf916a..9c25cc9e3 100644 --- a/src/core/alloc_type.hpp +++ b/src/core/alloc_type.hpp @@ -180,4 +180,38 @@ public: inline void operator delete[](void *ptr) { free(ptr); } }; +/** + * A smart pointer class that free()'s the pointer on destruction. + * @tparam T Storage type. + */ +template +class AutoFreePtr +{ + T *ptr; ///< Stored pointer. + +public: + AutoFreePtr(T *ptr) : ptr(ptr) {} + ~AutoFreePtr() { free(this->ptr); } + + /** + * Take ownership of a new pointer and free the old one if needed. + * @param ptr NEw pointer. + */ + inline void Assign(T *ptr) + { + free(this->ptr); + this->ptr = ptr; + } + + /** Dereference pointer. */ + inline T *operator ->() { return this->ptr; } + /** Dereference pointer. */ + inline const T *operator ->() const { return this->ptr; } + + /** Cast to underlaying regular pointer. */ + inline operator T *() { return this->ptr; } + /** Cast to underlaying regular pointer. */ + inline operator const T *() const { return this->ptr; } +}; + #endif /* ALLOC_TYPE_HPP */ -- cgit v1.2.3-54-g00ecf