Update simObject.h

test case for restoring destroySelf to simobjectptr (ghosting may require it)
This commit is contained in:
marauder2k7 2026-02-23 19:06:38 +00:00
parent ca4517c076
commit cc6a1c0932

View file

@ -1054,16 +1054,42 @@ public:
typedef WeakRefPtr< T > Parent; typedef WeakRefPtr< T > Parent;
SimObjectPtr() = default; SimObjectPtr() = default;
SimObjectPtr(T* ptr) : Parent(ptr) {} SimObjectPtr(T* ptr) { set(ptr); }
SimObjectPtr(const SimObjectPtr&) = default; SimObjectPtr(const SimObjectPtr&) = default;
SimObjectPtr& operator=(const SimObjectPtr&) = default; SimObjectPtr& operator=(const SimObjectPtr&) = default;
SimObjectPtr& operator=(T* ptr) SimObjectPtr& operator=(T* ptr)
{ {
Parent::operator=(ptr); set(ptr);
return *this; return *this;
} }
T* getObject() const { return Parent::getPointer(); } T* getObject() const { return Parent::getPointer(); }
protected:
void set(T* obj)
{
// Nothing to do if same object
if (obj && mWeak.lock().get() == obj->getWeakControl().lock().get())
return;
// Before overwriting, check old object for auto-delete
if (auto old_ctrl = mWeak.lock())
{
T* old_obj = getObject();
if (mWeak.use_count() == 1 && old_obj && old_obj->isAutoDeleted())
{
old_obj->destroySelf();
}
}
// Assign new weak reference
mWeak.reset();
if (obj)
{
auto obj_ctrl = obj->getWeakControl().lock();
mWeak = obj_ctrl;
}
}
}; };
#endif // _SIMOBJECT_H_ #endif // _SIMOBJECT_H_