// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved. #pragma once #include "Engine/Core/Compiler.h" /// /// Helper class used to delete another object. /// template class DeleteMe { private: T* _toDelete; DeleteMe() { } DeleteMe(const DeleteMe&) { }; DeleteMe& operator=(const DeleteMe&) { return *this; }; public: /// /// Init /// /// Object to delete explicit DeleteMe(T* toDelete) : _toDelete(toDelete) { } /// /// Destructor /// ~DeleteMe() { if (_toDelete) ::Delete(_toDelete); } public: /// /// Delete linked object and assign new one /// /// New object void DeleteAndSetNew(T* other) { ASSERT(other); if (_toDelete) { ::Delete(_toDelete); } _toDelete = other; } /// /// Delete linked object /// void Delete() { if (_toDelete) { ::Delete(_toDelete); _toDelete = nullptr; } } FORCE_INLINE bool IsSet() const { return _toDelete != nullptr; } FORCE_INLINE bool IsMissing() const { return _toDelete == nullptr; } FORCE_INLINE T* Get() const { return _toDelete; } public: /// /// Object /// /// T* operator->() { return _toDelete; } /// /// Object /// /// Object const T* operator->() const { return _toDelete; } /// /// Object /// /// Object T* operator*() { return _toDelete; } /// /// Object /// /// Object const T& operator*() const { return *_toDelete; } };