From 4a6d9dba51024a2d58afd8dcaced6aa2943984a2 Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 24 Apr 2018 21:55:55 +0200 Subject: [PATCH] Sdk/EntityOwner: Fix move assignement operator --- ChangeLog.md | 1 + SDK/include/NDK/EntityOwner.hpp | 2 +- SDK/include/NDK/EntityOwner.inl | 16 ++++++++++++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 11c2003bf..d85eb5164 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -141,6 +141,7 @@ Nazara Development Kit: - ⚠️ TextAreaWidget now support text selection (WIP) - ⚠️ TextAreaWidget::GetHoveredGlyph now returns a two-dimensional position instead of a single glyph position - Fixed Entity::OnEntityDestruction signal not being properly moved and thus not being called. +- Fixed EntityOwner move assignment which was losing entity ownership # 0.4: diff --git a/SDK/include/NDK/EntityOwner.hpp b/SDK/include/NDK/EntityOwner.hpp index 4dca6010c..fb32f0780 100644 --- a/SDK/include/NDK/EntityOwner.hpp +++ b/SDK/include/NDK/EntityOwner.hpp @@ -25,7 +25,7 @@ namespace Ndk EntityOwner& operator=(Entity* entity); EntityOwner& operator=(const EntityOwner& handle) = delete; - EntityOwner& operator=(EntityOwner&& handle) noexcept = default; + EntityOwner& operator=(EntityOwner&& handle) noexcept; }; } diff --git a/SDK/include/NDK/EntityOwner.inl b/SDK/include/NDK/EntityOwner.inl index a1e28bc2a..566962fb0 100644 --- a/SDK/include/NDK/EntityOwner.inl +++ b/SDK/include/NDK/EntityOwner.inl @@ -31,7 +31,6 @@ namespace Ndk * * \see Reset */ - inline EntityOwner::~EntityOwner() { Reset(nullptr); @@ -68,13 +67,26 @@ namespace Ndk * * \param entity Entity to own */ - inline EntityOwner& EntityOwner::operator=(Entity* entity) { Reset(entity); return *this; } + + /*! + * \brief Steals ownership of a EntityOwner + * + * \param handle Handle to the new entity to own, or an invalid handle + */ + inline EntityOwner& EntityOwner::operator=(EntityOwner&& handle) noexcept + { + Reset(); //< Kill previously owned entity, if any + + EntityHandle::operator=(std::move(handle)); + + return *this; + } } namespace std