// Copyright (C) 2017 Jérôme Leclercq // This file is part of the "Nazara Development Kit" // For conditions of distribution and use, see copyright notice in Prerequisites.hpp #pragma once #ifndef NAZARA_OBJECTHANDLER_HPP #define NAZARA_OBJECTHANDLER_HPP #include #include #include namespace Nz { namespace Detail { struct NAZARA_CORE_API HandleData { void* object; static std::shared_ptr GetEmptyObject(); }; } template class ObjectHandle; template class HandledObject { friend ObjectHandle; public: HandledObject() = default; HandledObject(const HandledObject& object); HandledObject(HandledObject&& object) noexcept; ~HandledObject(); ObjectHandle CreateHandle(); HandledObject& operator=(const HandledObject& object); HandledObject& operator=(HandledObject&& object) noexcept; protected: void UnregisterAllHandles() noexcept; private: std::shared_ptr GetHandleData(); void InitHandleData(); std::shared_ptr m_handleData; }; } #include #endif // NAZARA_OBJECTHANDLER_HPP