Test adding rcp management to an external class via inheritance

This commit is contained in:
Josh Holtrop 2026-02-24 19:41:34 -05:00
parent 011460254d
commit 464527a34d

View File

@ -289,6 +289,44 @@ void test_dynamic_cast_failure()
assert(!derived); assert(!derived);
} }
/* Simulate a external class that cannot be modified */
namespace external
{
class Counter
{
public:
int start;
int count;
Counter(int start) : start(start), count(start) {}
virtual ~Counter() {}
};
}
static int external_destruct;
/* Create a managed wrapper for the external class. */
class Counter : public external::Counter
{
rcp_managed_root(Counter);
protected:
Counter(int start) : external::Counter(start) {}
~Counter() { external_destruct++; }
};
void test_external_class()
{
int before = external_destruct;
{
auto a = Counter::create(10);
auto b = Counter::create(20);
assert(a->count == 10);
assert(b->count == 20);
a->count++;
assert(a->count == 11);
}
assert(external_destruct == before + 2);
}
int main(int argc, char * argv[]) int main(int argc, char * argv[])
{ {
test_class_hierarchy(); test_class_hierarchy();
@ -309,5 +347,6 @@ int main(int argc, char * argv[])
test_dynamic_cast_failure(); test_dynamic_cast_failure();
test_dynamic_cast_move_success(); test_dynamic_cast_move_success();
test_dynamic_cast_move_failure(); test_dynamic_cast_move_failure();
test_external_class();
return 0; return 0;
} }