そもそも再帰的なデータ構造じゃないものなら
循環参照のしようがないので普通に shared_ptr で良いし
そういう処理もごく普通によくある

>>209
>(個々のノードは、参照先の到達済みフラグがTRUEならああ循環したんだなあとワカル

循環に限らず単純な共有でもこうなるので
そんなことでは循環したんだなあとワカラナイと思う