オブジェクトにアリーナ戦略を使用できます。基本的に、オブジェクトにはデータ アリーナへのインデックスとハンドルのみが含まれます。実際のデータは、アリーナの右側のインデックスに格納されます。このように double のベクトルを作成する必要がある場合、それはすでにアリーナ内に存在します。
これは、一緒に処理されるオブジェクトが常にわかっている場合にのみ機能し、ほとんどの場合一緒に処理されます。必要なオブジェクトを毎回選択する必要がある場合、これによってパフォーマンスが向上することはありません (オブジェクトが配列内で常に連続している場合を除きます)。これにより、通常のオブジェクトへのアクセスが少し遅くなるため、毎回値をコピーすることが実際にプログラムのボトルネックである場合にのみ意味があります。
データ構造は次のようになります。
class Arena {
vector<double> propertyX;
vector<double> propertyY;
int next_index;
};
class MyObject {
int index;
Arena& arena
MyObject(Arena& arena_ref): arena(arena_ref) { index = arena.next_index++; }
double getX() { return arena.propertyX[index]; }
};
物事が割り当てられていることなどを確認するには、もう少しコードが必要ですが、アイデアは得られます。外部ライブラリを呼び出す必要がある場合は、Arena
オブジェクトから直接配列を取得します。