有關可能在遍歷中進行資源釋放的資源釋放過程設計
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;
}
有關可能在遍歷中進行資源釋放的資源釋放過程設計
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Overlap IO與IOCP對比
SuperKuku
2020-02-25 06:42:11
NP使用經驗——中國區慎用
SuperKuku
2020-02-25 06:42:11
有關服務器屬性系統的思考
SuperKuku
2020-02-25 06:42:10
window 時間獲取
SuperKuku
2020-02-25 06:42:11
有關vs2010 release版本調試this指針問題
SuperKuku
2020-02-25 06:42:11
Simpler is Better
wlwchina
2020-02-25 02:17:17
Overlap IO與IOCP對比
SuperKuku
2020-02-25 06:42:11
NP使用經驗——中國區慎用
SuperKuku
2020-02-25 06:42:11
有關服務器屬性系統的思考
SuperKuku
2020-02-25 06:42:10
window 時間獲取
SuperKuku
2020-02-25 06:42:11
有關vs2010 release版本調試this指針問題
SuperKuku
2020-02-25 06:42:11