メモ:C++ではないCのオブジェクトのリスト

自分のプログラムがどうなってるかを書く。
☆☆☆☆☆☆
「リンクドリスト」を使う。
オブジェクトには「有効であるフラグ」(自分はkという変数名にしている*1)が含まれる。
次のようなコードがよく出る。

obj_type mlist;
...
do_objects()
{
	obj_type *m;
	for(m=mlist.next; m; m=m->next)
	{
		if (!m->k) continue;
		//たとえばキャラがとりのぞかれる
		//処理は m->k = 0 と書かれる

		...
		do_object(m);
	}
}

上記の書き方のところでは、リスト内のオブジェクトをリストから外す処理をやらないので安全。ただもちろん「if (!m->k)」は頻繁に書かれることになる。
またdo_object()内で例えば弾を撃つ処理が行われるが、その弾はリンクドリストの最初のオブジェクト(mlist.next)として追加される。これによりその新規オブジェクトがそのループ回自体のうちで使われることがない。
「リストを調べてm->kが「無効」にセットされたオブジェクトをリストから消す処理のルーチン」を毎フレームの最後に置き、ここでのみリストから外す処理が行われる。

*1:オブジェクトのポインタをoという名前にすると if (!o->k) などとなる