ベクター内のアイテムのリストを更新し、それらの一部を削除するための私のコードは次のとおりです。
std::vector<Particle*> particles;
...
int i = 0;
while ( i < particles.size() ) {
bool shouldRemove = particles[ i ]->update();
if ( shouldRemove ) {
delete particles[ i ];
particles[ i ] = particles.back();
particles.pop_back();
} else {
i++;
}
}
削除する必要があるアイテムを見つけたら、それをベクターの最後のアイテムに置き換えて、バッキング配列の残りの部分を複数回コピーする可能性を回避します。はい、私はそれが時期尚早の最適化であることを知っています...
これはベクターからアイテムを削除する有効な方法ですか? この辺りのどこかでときどき (!) クラッシュが発生しますが、正確に追跡することはできません (LLDB は行を表示しません)。そのため、この部分が問題ないことを確認したいと思います。またはそれは... ?
更新: バグを見つけましたが、実際にはコードの別の部分にありました。