From 1c7c1de3e7acf33c366ee27845db154dd0ae6734 Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 20 Apr 2015 01:28:18 +0200 Subject: [PATCH] Physics/PhysObject: Fixed Copy/Move operator Former-commit-id: 58377ee8d41ef39ade38fcbf03355af5e7d7db58 --- include/Nazara/Physics/PhysObject.hpp | 2 +- src/Nazara/Physics/PhysObject.cpp | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/Nazara/Physics/PhysObject.hpp b/include/Nazara/Physics/PhysObject.hpp index e4fd64735..92c71a2bb 100644 --- a/include/Nazara/Physics/PhysObject.hpp +++ b/include/Nazara/Physics/PhysObject.hpp @@ -56,7 +56,7 @@ class NAZARA_API NzPhysObject : NzNonCopyable void SetPosition(const NzVector3f& position); void SetRotation(const NzQuaternionf& rotation); - NzPhysObject& operator=(NzPhysObject object); + NzPhysObject& operator=(const NzPhysObject& object); NzPhysObject& operator=(NzPhysObject&& object); private: diff --git a/src/Nazara/Physics/PhysObject.cpp b/src/Nazara/Physics/PhysObject.cpp index 56ff5b080..038a7062d 100644 --- a/src/Nazara/Physics/PhysObject.cpp +++ b/src/Nazara/Physics/PhysObject.cpp @@ -269,11 +269,8 @@ void NzPhysObject::SetRotation(const NzQuaternionf& rotation) UpdateBody(); } -NzPhysObject& NzPhysObject::operator=(NzPhysObject object) +NzPhysObject& NzPhysObject::operator=(const NzPhysObject& object) { - std::swap(*this, object); - - return *this; } void NzPhysObject::UpdateBody() @@ -282,10 +279,15 @@ void NzPhysObject::UpdateBody() /*for (std::set::iterator it = m_listeners.begin(); it != m_listeners.end(); ++it) (*it)->PhysObjectOnUpdate(this);*/ + NzPhysObject physObj(object); + return operator=(std::move(physObj)); } NzPhysObject& NzPhysObject::operator=(NzPhysObject&& object) { + if (m_body) + NewtonDestroyBody(m_world->GetHandle(), m_body); + m_body = object.m_body; m_forceAccumulator = std::move(object.m_forceAccumulator); m_geom = std::move(object.m_geom);