Fix (and test) that copy constructor decrements previous object counter

This commit is contained in:
Josh Holtrop 2026-02-24 14:49:47 -05:00
parent 4a1a0c8855
commit 2e30a9f407
2 changed files with 21 additions and 4 deletions

View File

@ -54,11 +54,19 @@ public:
rcp<T> & operator=(const rcp & other)
{
if (ptr != other.ptr)
{
T * old_ptr = ptr;
ptr = other.ptr;
if (ptr)
{
ptr->rcp_inc();
}
if (old_ptr)
{
old_ptr->rcp_dec();
}
}
return *this;
}

View File

@ -28,6 +28,7 @@ public:
int x;
int y;
};
typedef rcp<MyBase> MyB;
class MyDerived : public MyBase
{
@ -85,7 +86,6 @@ void test_booleans()
void test_create()
{
typedef rcp<MyBase> MyB;
MyB myb = MyB::create(8, 9);
assert(myb->x == 8);
}
@ -124,6 +124,14 @@ void test_multi_construct_from_raw_pointers()
}
}
void test_copy_assignment_decrements_previous_reference()
{
MyB myb = MyB::create(12, 13);
MyB myb2 = MyB::create(14, 15);
myb = myb2;
assert(myb->x == 14);
}
int main(int argc, char * argv[])
{
test_class_hierarchy();
@ -131,5 +139,6 @@ int main(int argc, char * argv[])
test_booleans();
test_create();
test_multi_construct_from_raw_pointers();
test_copy_assignment_decrements_previous_reference();
return 0;
}