Core/ObjectHandle: Add noexcept move constructor/assignment

Former-commit-id: 930de41518be74fff072e061f735afceb218138c
This commit is contained in:
Lynix
2016-05-09 09:03:11 +02:00
parent e34c94343f
commit 7db8507874
6 changed files with 49 additions and 19 deletions

View File

@@ -24,11 +24,18 @@ namespace Nz
template<typename T>
ObjectHandle<T>::ObjectHandle(const ObjectHandle<T>& handle) :
ObjectHandle()
ObjectHandle()
{
Reset(handle);
}
template<typename T>
ObjectHandle<T>::ObjectHandle(ObjectHandle<T>&& handle) noexcept :
ObjectHandle()
{
Reset(std::move(handle));
}
template<typename T>
ObjectHandle<T>::~ObjectHandle()
{
@@ -66,6 +73,19 @@ namespace Nz
Reset(handle.GetObject());
}
template<typename T>
void ObjectHandle<T>::Reset(ObjectHandle<T>&& handle) noexcept
{
if (m_object)
m_object->UnregisterHandle(this);
if (T* object = handle.GetObject())
{
object->UpdateHandle(&handle, this);
handle.m_object = nullptr;
}
}
template<typename T>
ObjectHandle<T>& ObjectHandle<T>::Swap(ObjectHandle<T>& handle)
{
@@ -138,6 +158,14 @@ namespace Nz
return *this;
}
template<typename T>
ObjectHandle<T>& ObjectHandle<T>::operator=(ObjectHandle<T>&& handle) noexcept
{
Reset(std::move(handle));
return *this;
}
template<typename T>
void ObjectHandle<T>::OnObjectDestroyed()
{