cyclic shared pointers