>>632
1. Yes. コピペ上等の精神で乗り切る、はダメ?
 まぁ呼び出し側にdelete書く利点も探せば結構あるかと。もし欠点以上に利点探せたならラッキー。
 例えば、
 ・こっちのがクラスの単体テストしやすそう
 ・deleteを一気に1フレームでやらずに残り時間に応じて分散させたい場合に
  ゲームオブジェクト内のステートだけではタイミングを判断できないかもしれない。
  でも呼び出し側でなら制御できるかも。
 ・複数行の見栄えが嫌なら関数化してお勧め処理として一緒に付けとけば軽減可能

2. 子タスクは無しの方向で。全部同列、同位の存在にする。
 タスクという概念上はどれも全部「処理」。親子の概念なし。
 処理順序はupdate()の記述順序で指定。

 親子タスクは無いけれど親子データとか親子オブジェクトは欲しい。
 それは単なるオブジェクト間の通信に帰着可能だと思うので
 下のupdate()群のように等価に置き換えできないでしょか。
void 1フレーム分の処理(void)
{
  ...
  m_task_update_player.update();
  m_task_follow_player_option.update(); // player->isdead()ならoption->set_state(PLAYER_DEAD);したり
  m_task_follow_player_lasershot.update()
  m_task_delete_player.update();
  m_task_delete_option.update(); //need_delete()ならdeleteしたり
  m_task_delete_lasershot.update();
  ...
  m_task_draw_option.update(); //もしくは死亡アニメーション終わったらdeleteしたり
  ...
}