acyclic shared ptr