shared_ptr 内部を認識し、格納された shared_ptr 要素の定期的なコピーを回避して、内部の弱いポインターをコピーするだけのコレクションが存在しますか?
これは暗黙のうちに、コンストラクタ/デストラクタの呼び出しが行われず、shared_ptrs の参照カウンターが操作されないことを意味します。
shared_ptr 内部を認識し、格納された shared_ptr 要素の定期的なコピーを回避して、内部の弱いポインターをコピーするだけのコレクションが存在しますか?
これは暗黙のうちに、コンストラクタ/デストラクタの呼び出しが行われず、shared_ptrs の参照カウンターが操作されないことを意味します。
理論的には、C++0x が採用された後、コンテナーは必要に応じて移動セマンティクスを使用するように変更されます。その時点で、shared_ptr
不必要な参照カウント調整を最小限に抑える移動コンストラクターを持つように変更することもできます。
shared_ptr 内部を認識している、
それはあなたの質問にすぐに答えるはずです。内部を認識するために、そのようなコレクションはほぼ確実にブーストのスマート ポインター ライブラリの一部である必要があります。残念ながら、そのようなことはありません。
これは確かにスマート ポインターの欠点です。内部で行われるコピーの数を制限するデータ構造を使用することをお勧めします。Vector の再割り当ては面倒です。おそらく、チャンクベースの割り当てを持つ両端キューが役立つでしょう。ベクトルの実装は、指数関数的に増加するチャンクで新しいメモリを取得する傾向があることにも注意してください。したがって、たとえば 10 要素ごとに再割り当てすることはありません。代わりに、128 要素から始めて、ベクトルが 256 を予約し、その後 512、1024 などに移動します。毎回、必要なものが 2 倍になります。
これに加えて、boost の ptr_vector があるか、データ構造に十分なスペースを事前に割り当てて、内部コピーを防ぐ必要があります。