Preventing Cycles with shared_ptr