6

boost::intrusive のドキュメントでは、スマート ポインターを侵入型コンテナーで使用する方法について説明していますが、使用する可能性が最も高いスマート ポインターは使用できないと述べています。リソース管理スマート ポインター (boost::shared_ptr など) を使用できないことを意味します。"

どうしてこれなの?禁止すべき明確な理由が思いつきません。正確には何が壊れますか?とにかく、侵入型コンテナはその中のアイテムの割り当てを管理しません。私の場合、intrusive_ptr を使用したいのですが、shared_ptr が機能しない理由がわかりません。

編集:明確にするために、フックポインター(たとえば、侵入型の単一リンクリストの次のポインター)がスマートポインターであることを意味します。

4

3 に答える 3

2

おそらく、参照サイクルがあるため、デフォルトの構成では、循環リストとして保存され、 /と友人の使用を排除すると述べているドキュメントに手がかりがあります。boost::intrusive::slistslistshared_ptrintrusive_ptr

ブーストの一部が別の部分で適切に機能しないことは、依然として厄介です。唯一の回避策はintrusive_ptr、オブジェクトをコンテナに追加するときに参照カウントを手動で増やし、削除するときにデクリメントするようなものを使用することだと思います。(shared_ptr参照カウントを直接調整できないため、これは除外されます。)

于 2013-03-23T19:26:43.513 に答える
0

おそらくこれは、侵入型コンテナがすでに内部でメモリを管理しており(ブーストptr_コンテナのように)、2つの異なる侵入型コンテナの実装(1つは非所有ポインタ用ともう1つは所有用)を作成する代わりに、どのタイプに制限を設けることにしたためです。ポイントの使用が可能です。

于 2012-12-14T14:35:42.650 に答える
0

明らかな理由の 1 つは効率です。shared_ptrアトミック インクリメント/デクリメント操作を使用して参照をカウントします。shared_ptrこれは、すべての参照カウンターをアトミックにデクリメントする必要があるため、ボンネットの下でポインターを使用する十分に大きなコンテナーを破棄するのに数秒かかることを意味します。

于 2012-12-14T06:51:42.617 に答える