4

誰もが実装を提案しますか? 先日これを自宅で試してみたところ、移動のセマンティクスが難しすぎて、前のリンクや単純なリンク リストを確立できないことがわかりました。std::unique_ptr を使用してツリーを作成すると簡単です。もちろん、 std::shared_ptr は、コピー/割り当てのおかげで、この質問を簡単に実装できます。それでどうですか?

4

3 に答える 3

6

質問が再開されたので、答えだと思うものとしてコメントを投稿します。

のみ を使用する場合unique_ptr、それは不可能です。二重にリンクされたリストでは、各要素を指す2 つのポインターがあり、両方を unique_ptrs にすることはできません。(それはどういうわけかユニークな部分と矛盾します...)

明確にするために、3 つの要素のA <-> B <-> Cリストを考えてみましょAう。、 poiting to同様に、そしてそれを所有します。2 つの が同じオブジェクトを所有することは、unique_land の法則に反します。unique_ptr nextBBCunique_ptr prevBunique_ptrunique_ptr

next別の方法は、ポインターがであるリストですが、unique_ptrsポインターlastは単純な古い C ポインターです。問題はあまり見られないので、それはあなたが望んでいたことではないと思います。

しかし、その「半固有のリスト」のようなものを念頭に置いている場合は、コードを提供して、問題があることを教えてください-喜んでお手伝いします:)

于 2013-03-13T13:39:47.123 に答える
0

これが私が使用するものです、

https://gist.github.com/mukunda-/153d802065c130e2956c

もちろん、それが唯一可能な方法であるため、「半固有」メソッドを使用しています。

これが行うことは、与えられた unique_ptr を制御し、リスト内のアイテムとのやり取りは通常のポインターで行われることです。リストからアイテムを引き出すと、所有権が得られます。

基本的に、スマート ポインターを使用した自動削除の利便性が得られます。もちろん、オブジェクトの 1 つで作業しているときにリスト オブジェクトを削除すると壊れます。その場合は、shared_ptr リストが必要になります。

于 2014-11-18T23:25:58.150 に答える