explanation about cyclic_ptr in smart_ptr