私はいくつかのファンクターに渡す必要があるオブジェクトのコレクション (現在boost::ptr_vector
) を持っています (これを vec と呼びましょう)。すべてのファンクターに、基本的にキャッシュである同じ vec への参照/ポインターを持たせて、各ファンクターが同じデータ キャッシュを持つようにします。これを行うには、次の 3 つの方法が考えられます。
Functor クラス
boost::ptr_vector<object>&
のコンストラクターにa を渡し、メンバーFunctor
を持つboost::ptr_vector<object>&
boost::ptr_vector<object>*
Functor のコンストラクターにa を渡し、boost::ptr_vector<object>*
Functor クラスにメンバーを持つの使用を避け、配列 ( ) をコンストラクターに
boost::ptr_vector
直接渡すobject*
方法 3 を使用しようとしましたが、生のポインターの代わりにベクターを使用する必要があると常に言われました。そのため、方法 2 を試しましたが、ポインターによって追加された余分なレベルの間接性が原因で、プログラムにレイテンシが追加されました。現時点では方法 1 を使用していますが、ファンクターの有効期間中にキャッシュを再割り当てする必要がある場合があるため (データ キャッシュが変更される可能性があるため)、これは適切な代替手段ではない可能性があります。
私は完全には理解していません。ファンクターがコピーされている途中のどこかを想定しています (ただし、これらはすべて ptr_vector 自体に格納されています)。
方法 3 は私の場合に最適ですか? 方法 2 は遅すぎます (レイテンシーが非常に重要です)。方法 1 に関しては、代わりにベクトルを使用するように何度もアドバイスされています。
どんなアドバイスでも大歓迎です