[Scummvm-git-logs] scummvm master -> 8c61c7aecad7f59b18d379d1fc871213498973dc
sev-
noreply at scummvm.org
Tue Jul 14 22:48:39 UTC 2026
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
8c61c7aeca COMMON: Add move-assign operator to DisposablePtr
Commit: 8c61c7aecad7f59b18d379d1fc871213498973dc
https://github.com/scummvm/scummvm/commit/8c61c7aecad7f59b18d379d1fc871213498973dc
Author: Helco (hermann.noll at hotmail.com)
Date: 2026-07-15T00:48:35+02:00
Commit Message:
COMMON: Add move-assign operator to DisposablePtr
Changed paths:
common/ptr.h
test/common/ptr.h
diff --git a/common/ptr.h b/common/ptr.h
index 567e439aae7..c0fe1185ada 100644
--- a/common/ptr.h
+++ b/common/ptr.h
@@ -670,6 +670,14 @@ public:
if (_dispose) DL()(_pointer);
}
+ DisposablePtr<T, DL> &operator=(DisposablePtr<T, DL> &&o) {
+ reset(o._pointer, o._dispose);
+ _shared = move(o._shared);
+ o._pointer = nullptr;
+ o._dispose = DisposeAfterUse::NO;
+ return *this;
+ }
+
ReferenceType operator*() const { return *_pointer; }
PointerType operator->() const { return _pointer; }
diff --git a/test/common/ptr.h b/test/common/ptr.h
index 8200825dc13..ec3dbb0b975 100644
--- a/test/common/ptr.h
+++ b/test/common/ptr.h
@@ -166,6 +166,46 @@ class PtrTestSuite : public CxxTest::TestSuite {
TS_ASSERT(a.expired());
TS_ASSERT(!a.lock());
}
+
+ struct IsDeletedClass {
+ bool isDeleted = false;
+ void operator ()(IsDeletedClass *ptr) {
+ TS_ASSERT(!ptr->isDeleted);
+ ptr->isDeleted = true;
+ }
+ };
+
+ void test_disposable_move_assign() {
+ IsDeletedClass obj1, obj2, obj3, obj4;
+ Common::DisposablePtr<IsDeletedClass, IsDeletedClass> p1(&obj1, DisposeAfterUse::YES);
+
+ // move-assign from YES to YES ptr
+ {
+ Common::DisposablePtr<IsDeletedClass, IsDeletedClass> p2(&obj2, DisposeAfterUse::YES);
+ p1 = Common::move(p2);
+ TS_ASSERT(obj1.isDeleted);
+ }
+ TS_ASSERT(!obj2.isDeleted); // p2 did not delete its old object
+
+ // move-assign from NO to YES ptr
+ {
+ Common::DisposablePtr<IsDeletedClass, IsDeletedClass> p3(&obj3, DisposeAfterUse::NO);
+ p1 = Common::move(p3);
+ TS_ASSERT(obj2.isDeleted);
+ }
+ p1.reset();
+ TS_ASSERT(!obj3.isDeleted); // NO dispose flag was correctly propagated
+
+ // move-assign from YES to NO ptr
+ {
+ Common::DisposablePtr<IsDeletedClass, IsDeletedClass> p4(&obj4, DisposeAfterUse::YES);
+ p1 = Common::move(p4);
+ TS_ASSERT(!obj3.isDeleted); // this was still NO
+ TS_ASSERT(!obj4.isDeleted);
+ }
+ p1.reset();
+ TS_ASSERT(obj4.isDeleted); // YES dispose flag was correctly propagated
+ }
};
int PtrTestSuite::InstanceCountingClass::count = 0;
More information about the Scummvm-git-logs
mailing list