diff options
Diffstat (limited to 'common/ptr.h')
-rw-r--r-- | common/ptr.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/common/ptr.h b/common/ptr.h index d06a25edb8..2b0670caae 100644 --- a/common/ptr.h +++ b/common/ptr.h @@ -24,6 +24,7 @@ #include "common/scummsys.h" #include "common/noncopyable.h" +#include "common/types.h" namespace Common { @@ -273,6 +274,41 @@ private: PointerType _pointer; }; + +template<typename T> +class DisposablePtr : NonCopyable { +public: + typedef T ValueType; + typedef T *PointerType; + typedef T &ReferenceType; + + explicit DisposablePtr(PointerType o, DisposeAfterUse::Flag dispose) : _pointer(o), _dispose(dispose) {} + + ~DisposablePtr() { + if (_dispose) delete _pointer; + } + + ReferenceType operator*() const { return *_pointer; } + PointerType operator->() const { return _pointer; } + + /** + * Implicit conversion operator to bool for convenience, to make + * checks like "if (scopedPtr) ..." possible. + */ + operator bool() const { return _pointer; } + + /** + * Returns the plain pointer value. + * + * @return the pointer the DisposablePtr manages + */ + PointerType get() const { return _pointer; } + +private: + PointerType _pointer; + DisposeAfterUse::Flag _dispose; +}; + } // End of namespace Common #endif |