各ノードに子ノードへのポインタが含まれているバイナリツリーがある場合は、unique_ptr
がうまく機能します。各ノードに親ポインタを持たせたい場合、ノードに3つのポインターがあるため、状況はあまり良くありません。Binary Tree with parent pointerバイナリツリーのスマートポインタ
この場合、私は何ができますか?私はすべてのためにshared_ptr
を使用することができますが、私はサイクルを得るかもしれないので、それは良いデザインではないと言われてきました。親ポインタにweak_ptr
を使用する場合は、shared_ptr
をweak_ptr
から作成しますか?
普通の組み込みポインタがこの問題に適していると思っています。アドバイスをいただければ幸いです。
'std :: unique_ptr'と親に対する**所有していない**未処理のポインタのペアには何も問題はありません。 – StoryTeller
ほとんどの場合、スマートポインタには単純な自己削除ポインタが表示されるのではなく、所有権プリミティブとして表示されるべきです。"リソース"は単一の所有者( 'std :: unique_ptr')または複数の同時所有者(' std :: shared_ptr'を持つ)のみを持つことができますか? –
多分私はここにいますが、btreeの実装の中でスマートポインタを使用するという考えは、最良のものではありません。あなたがコントロールしている具体的なクラスの中で生ポインタを使うことには何の問題もありません。また、「所有者である」という概念は、ツリーに結びついた簡単な(直感的な)ビューが複数あります。後でグラフ操作を実装したい場合は、おそらく混乱するでしょう。 –