誰もが実装を提案しますか? 先日これを自宅で試してみたところ、移動のセマンティクスが難しすぎて、前のリンクや単純なリンク リストを確立できないことがわかりました。std::unique_ptr を使用してツリーを作成すると簡単です。もちろん、 std::shared_ptr は、コピー/割り当てのおかげで、この質問を簡単に実装できます。それでどうですか?
3 に答える
質問が再開されたので、答えだと思うものとしてコメントを投稿します。
のみ を使用する場合unique_ptr
、それは不可能です。二重にリンクされたリストでは、各要素を指す2 つのポインターがあり、両方を unique_ptrs にすることはできません。(それはどういうわけかユニークな部分と矛盾します...)
明確にするために、3 つの要素のA <-> B <-> C
リストを考えてみましょA
う。、 poiting to同様に、そしてそれを所有します。2 つの が同じオブジェクトを所有することは、unique_land の法則に反します。unique_ptr next
B
B
C
unique_ptr prev
B
unique_ptr
unique_ptr
next
別の方法は、ポインターがであるリストですが、unique_ptrs
ポインターlast
は単純な古い C ポインターです。問題はあまり見られないので、それはあなたが望んでいたことではないと思います。
しかし、その「半固有のリスト」のようなものを念頭に置いている場合は、コードを提供して、問題があることを教えてください-喜んでお手伝いします:)
これが私が使用するものです、
https://gist.github.com/mukunda-/153d802065c130e2956c
もちろん、それが唯一可能な方法であるため、「半固有」メソッドを使用しています。
これが行うことは、与えられた unique_ptr を制御し、リスト内のアイテムとのやり取りは通常のポインターで行われることです。リストからアイテムを引き出すと、所有権が得られます。
基本的に、スマート ポインターを使用した自動削除の利便性が得られます。もちろん、オブジェクトの 1 つで作業しているときにリスト オブジェクトを削除すると壊れます。その場合は、shared_ptr リストが必要になります。