2011-12-31 5 views
0

私はスマートなptrに関する束を読んでおり、参照カウントのために私自身の実装でintrusive_ptrを使うことに決めました。この状況でintrusive_ptrを効率的に使用する方法はありますか?

私はもう別の問題に直面していますが、weak_ptrを考慮した参照サイクルを解決する方法は、auto_ptrクラスでは使用できません。

弱参照を格納する必要がある生ポインタを使用してサイクルを解決するのは良いことでしょうか?これは、強い参照が削除された場合、弱い参照は通知/ゼロ化されませんが、正しく依存関係を生成すると良い選択肢になると思いますが、ここで間違っている可能性があります。

誰でもこれについて意見をいただけますか?

+2

あなたの質問は曖昧です。あなたの特定のシナリオでは、実際には 'weak_ptr'が提供する機能が必要ですか、ダムポインタで十分でしょうか? (つまり、所有していないポインタが有効かどうかをテストする能力が必要ですか?)その質問に答えると、あなたは質問した質問に対する答えを得ます。 –

+0

"arquitecting"とは何を意味しますか? –

+0

彼は建築を意味する – Daniel

答えて

1

shared_ptrを使用してください。使い方が簡単で、言及したweak_ptrで動作します。たぶんいつかあなたは侵入的な使い方をしたいと思うかもしれませんが、それまでは単純にしておきましょう。

+0

一見して私はshared_ptrを使用しましたが、それは私にとってはちょっとハッキリです。これを渡したい場合は、enable_shared_from_thisからクラスを削除する必要があります。二重削除ポインタは本当に簡単に作成できます。新しい参照カウンタがいつ作成されるかを知るのが難しいです...私はshared_ptrが良いものではないと言っているわけではありませんしかし、私はそれを完全に理解することが困難であることが分かったので、私はintrusive_ptrのようなより簡単な解決策をとることを勧めました。多分それは良い決断ではなかったでしょう。 – Notbad

+1

反対側の芝生はいつも緑が多いようです。私が座っている場所から、intrusive_ptrはshared_ptrと同じくらい使いやすいものではありません。ところで、boost :: make_shared <>()を使用すると、shared_ptrで2つではなく、ヒープ割り当てを1つだけ取得できます。また、shared_ptrをあきらめる前にプールを見ることもできます。いくつかの人々がどのようにその組み合わせを使用しているかを見ることができます:http://stackoverflow.com/questions/2911154/custom-pool-allocator-with-boost-shared-ptr –

+0

verty informative。それを調べなければならない。 – Notbad

関連する問題