diff --git a/server/gameserver/weakptr.cc b/server/gameserver/weakptr.cc index 71d38af..f1912f2 100644 --- a/server/gameserver/weakptr.cc +++ b/server/gameserver/weakptr.cc @@ -33,6 +33,47 @@ CreatureWeakPtr::CreatureWeakPtr() INIT_LIST_HEAD(&entry_); } +CreatureWeakPtr::CreatureWeakPtr(const CreatureWeakPtr& x) +{ + INIT_LIST_HEAD(&entry_); + if (x.ptr_) { + Attach(x.ptr_); + } +} + +CreatureWeakPtr::CreatureWeakPtr(CreatureWeakPtr&& x) +{ + INIT_LIST_HEAD(&entry_); + if (x.ptr_) { + Attach(x.ptr_); + x.Detach(); + } +} + +CreatureWeakPtr& CreatureWeakPtr::operator=(const CreatureWeakPtr& x) +{ + if (ptr_) { + Detach(); + } + if (x.ptr_) { + Attach(x.ptr_); + } + return *this; +} + +CreatureWeakPtr&& CreatureWeakPtr::operator=(CreatureWeakPtr&& x) +{ + if (ptr_) { + Detach(); + } + if (x.ptr_) { + Attach(x.ptr_); + x.Detach(); + } + abort(); + // return *this; +} + CreatureWeakPtr::~CreatureWeakPtr() { Reset(); diff --git a/server/gameserver/weakptr.h b/server/gameserver/weakptr.h index 62a82f9..471dd5a 100644 --- a/server/gameserver/weakptr.h +++ b/server/gameserver/weakptr.h @@ -22,6 +22,10 @@ class CreatureWeakPtr public: CreatureWeakPtr(); + CreatureWeakPtr(const CreatureWeakPtr& x); + CreatureWeakPtr(CreatureWeakPtr&& x); + CreatureWeakPtr& operator=(const CreatureWeakPtr& x); + CreatureWeakPtr&& operator=(CreatureWeakPtr&& x); ~CreatureWeakPtr(); void Reset(); Creature* Get();