// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Development Kit" // For conditions of distribution and use, see copyright notice in Prerequesites.hpp #pragma once #ifndef NAZARA_OBJECTHANDLER_HPP #define NAZARA_OBJECTHANDLER_HPP #include #include #include namespace Nz { template class ObjectHandle; template class HandledObject { friend ObjectHandle; public: HandledObject() = default; HandledObject(const HandledObject& object); HandledObject(HandledObject&& object); ~HandledObject(); ObjectHandle CreateHandle(); HandledObject& operator=(const HandledObject& object); HandledObject& operator=(HandledObject&& object); protected: void UnregisterAllHandles(); private: void RegisterHandle(ObjectHandle* handle); void UnregisterHandle(ObjectHandle* handle) noexcept; void UpdateHandle(ObjectHandle* oldHandle, ObjectHandle* newHandle) noexcept; std::vector*> m_handles; }; } #include #endif // NAZARA_OBJECTHANDLER_HPP