diff options
-rw-r--r-- | src/core/alloc_type.hpp | 34 |
1 files changed, 34 insertions, 0 deletions
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 <typename T> +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 */ |