有關可能在遍歷中進行資源釋放的資源釋放過程設計

有關可能在遍歷中進行資源釋放的資源釋放過程設計
1.
存在Tick,可以把釋放的資源記錄。在下一幀開始或者該幀結束的時候進行統一的釋放


class ActorManager
{
public:
void Tick()
{
m_arActor.Tick();

Clear();
}

void Free(Actor*)
{
m_arActorWaitForFree.push_back(Actor*);
}

void Clear()
{
for(m_arActorWaitForFree)
m_arActor.erase(m_arActorWaitForFree[i]);

m_arActorWaitForFree.clear();
}
private:
vector<Actor*> m_arActor;
vector<Actor*> m_arActorWaitForFree;
}


2.
沒有Tick的,可以考慮設置回調現場。如果存在現場則,緩存在回調結束後進行釋放。如果不存在現場則直接釋放
class ActorManager
{
public:
void OnEvent()
{
m_bOnEvent++;

m_arActor.OnEvent();

Clear();

m_bOnEvent--;
}

void Free(Actor*)
{
m_arActorWaitForFree.push_back(Actor*);
if(!m_bOnEvent)
Clear()
}

void Clear()
{
for(m_arActorWaitForFree)
m_arActor.erase(m_arActorWaitForFree[i]);

m_arActorWaitForFree.clear();
}
private:
vector<Actor*> m_arActor;
vector<Actor*> m_arActorWaitForFree;
}


3.
在遍歷前使用智能指針進行緩存。直接調用釋放接口。回調結束智能指針自動釋放
class ActorManager
{
public:
void OnEvent()
{
arTempOnEvent = m_arActor;

m_arActor.OnEvent();

arTempOnEvent.clear()
}

void Free(Actor*)
{
m_arActor.erase(Actor);
}



private:
vector<share_ptr<Actor>> m_arActor;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章