Add reset()

This commit is contained in:
Josh Holtrop 2026-02-24 17:07:07 -05:00
parent ddaae32525
commit 11555ded36
2 changed files with 19 additions and 0 deletions

View File

@ -118,6 +118,15 @@ public:
other.ptr = nullptr; other.ptr = nullptr;
} }
void reset()
{
if (ptr)
{
ptr->rcp_dec();
ptr = nullptr;
}
}
T * get_raw() const T * get_raw() const
{ {
return ptr; return ptr;

View File

@ -181,6 +181,15 @@ void test_move_assignment_releases_existing()
assert(mybase_destruct == destructed_before + 2); assert(mybase_destruct == destructed_before + 2);
} }
void test_reset()
{
int destructed_before = mybase_destruct;
MyB p = MyB::create(1, 2);
p.reset();
assert(!p);
assert(mybase_destruct == destructed_before + 1);
}
void test_upcast() void test_upcast()
{ {
rcp<MyDerived> derived = MyDerived::create(1.5); rcp<MyDerived> derived = MyDerived::create(1.5);
@ -229,6 +238,7 @@ int main(int argc, char * argv[])
test_create(); test_create();
test_multi_construct_from_raw_pointers(); test_multi_construct_from_raw_pointers();
test_copy_assignment_decrements_previous_reference(); test_copy_assignment_decrements_previous_reference();
test_reset();
test_move_constructor(); test_move_constructor();
test_move_assignment(); test_move_assignment();
test_move_assignment_releases_existing(); test_move_assignment_releases_existing();