タスクシステム タスク間の依存関係

ゲームでは、タスク実行に他のタスクの情報が必要な場合が多々ある。例えば、プレイヤーを追尾する誘導弾のタスクはプレイヤーの位置情報を知る必要がある。ただ、ここで誘導弾タスクにプレイヤータスクへの生ポインタを保有させるのは危険。プレイヤータスクが死亡して解体された時点で、誘導弾タスクが保有するポインタは不正な物になってしまうから。
というわけで、解体済みオブジェクトへのアクセスを防ぐため、タスクに固有のIDを持たせ、これを介してアクセスを行うことで、他タスクへの生ポインタを保有させない設計が良さそう。
各タスクにはuniqueなIDを持たせ、タスク管理クラスに自分のポインタを登録する。タスク管理クラスは、タスクIDをキーとしたstd::mapの連想配列保有していて、タスク同士の参照やメッセージのやり取りを仲介する。衝突やキー入力などもタスク間メッセージとして扱う。
メッセージのやり取りは特定のタスクだけでなく不特定多数のタスクにメッセージを送信する機構も必要か(自身の死亡を通知する、など)。