#include #include static int mybase_construct; static int mybase_destruct; static int myderived_construct; static int myderived_destruct; class MyBase { rcp_managed_root(MyBase); protected: MyBase(int x, int y) { this->x = x; this->y = y; mybase_construct++; } virtual ~MyBase() { mybase_destruct++; } public: int x; int y; }; class MyDerived : public MyBase { rcp_managed(MyDerived); protected: MyDerived(double v) : MyBase(1, 2) { this->v = v; myderived_construct++; } virtual ~MyDerived() { myderived_destruct++; } public: double v; }; void test_destructors_called() { { rcp mybase = MyBase::create(4, 5); rcp myderived = MyDerived::create(42.5); } assert(mybase_construct == 2); assert(mybase_destruct == 2); assert(myderived_construct == 1); assert(myderived_destruct == 1); } void test_dereference() { rcp mybase = MyBase::create(2, 3); assert(mybase->x == 2); assert(mybase->y == 3); assert((*mybase).x == 2); assert((*mybase).y == 3); } void test_booleans() { rcp mybase = MyBase::create(2, 3); assert(mybase); rcp myderived; assert(!myderived); } void test_create() { typedef rcp MyB; MyB myb = MyB::create(8, 9); assert(myb->x == 8); } int main(int argc, char * argv[]) { test_destructors_called(); test_dereference(); test_booleans(); test_create(); return 0; }