CSceneManager::~CSceneManager() { SceneMap::iterator itor = m_mapSceneList.begin(); for(; itor != m_mapSceneList.end(); ++itor) { CScene *pScene = itor->second; if(pScene != NULL) { pScene->Uninit(); delete pScene; pScene = NULL; } } }
//*************************************************************** // 全更新 //*************************************************************** void CScene::UpdateAll(void) { //ポインタ宣言 CScene *pScene; for(int nCount = 0 ; nCount < MAX_LIST ; nCount++) { pScene = m_apTop[nCount]; while(pScene) { //次のオブジェクトへのポインタを保存 CScene *pSceneNext = pScene->m_pNext; //更新 pScene->Update(); //次のオブジェクトを代入 pScene = pSceneNext; } } for(int nCount = 0 ; nCount < MAX_LIST ; nCount++) { pScene = m_apTop[nCount]; while(pScene) { //次のオブジェクトへのポインタを保存 CScene *pSceneNext = pScene->m_pNext; //死亡フラグが成立している場合 if(pScene->m_bDelete) { //リストの先頭の場合 if(pScene == m_apTop[pScene->m_nPriority]) { //先頭にリリース対象の次のアドレスを入れる m_apTop[pScene->m_nPriority] = pScene->m_pNext; //リストの残りが複数の時 if(pScene->m_pNext != NULL) { pScene->m_pNext->m_pPrev = NULL; } } //リストの最後の場合 else if(pScene == m_apCur[pScene->m_nPriority]) { m_apCur[pScene->m_nPriority] = pScene->m_pPrev; pScene->m_pPrev->m_pNext = NULL; } //それ以外 else { pScene->m_pPrev->m_pNext = pScene->m_pNext; pScene->m_pNext->m_pPrev = pScene->m_pPrev; } //解放処理 pScene->Uninit(); delete pScene; } //次のオブジェクトを代入 pScene = pSceneNext; } } }