Magic_Game/core/Base/GC.cpp

74 lines
1.1 KiB
C++
Raw Normal View History

2018-04-21 21:24:46 +08:00
#include "..\e2dbase.h"
#include "..\e2dtool.h"
// GC <20><><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD>
e2d::GC e2d::GC::_instance;
e2d::GC::~GC()
{
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>
Game::destroyInstance();
Renderer::destroyInstance();
Window::destroyInstance();
Player::destroyInstance();
}
2018-05-19 01:10:37 +08:00
// GC <20>ͷųص<C5B3>ʵ<EFBFBD>ֻ<EFBFBD><D6BB>ƣ<EFBFBD>
// Object <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>_refCount<6E><74><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>̶<EFBFBD><CCB6>Ϸ<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>ڴ<EFBFBD>й©
// <20><><EFBFBD><EFBFBD>¼<EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õĴ<C3B5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 0 ʱ<><CAB1>GC <20><><EFBFBD>Զ<EFBFBD><D4B6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-03-03 17:02:08 +08:00
// <20><><EFBFBD>е<EFBFBD> Object <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ڱ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Text <20><><EFBFBD>ӵ<EFBFBD><D3B5>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>У<EFBFBD>
2017-10-21 19:53:38 +08:00
// <20><><EFBFBD><EFBFBD> retain <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD>ö<EFBFBD><C3B6>󲻱<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> release <20><><EFBFBD><EFBFBD>
2018-05-19 01:10:37 +08:00
void e2d::GC::__update()
{
if (!_notifyed) return;
2017-10-14 01:07:34 +08:00
_notifyed = false;
for (auto iter = _pool.begin(); iter != _pool.end();)
{
if ((*iter)->getRefCount() <= 0)
{
(*iter)->onDestroy();
delete (*iter);
iter = _pool.erase(iter);
}
else
{
2018-05-14 22:51:40 +08:00
++iter;
}
}
}
void e2d::GC::clear()
2018-03-03 17:02:08 +08:00
{
for (auto pObj : _pool)
{
delete pObj;
}
_pool.clear();
2018-03-03 17:02:08 +08:00
}
void e2d::GC::addObject(e2d::Object * pObject)
{
if (pObject)
{
_pool.insert(pObject);
}
}
e2d::GC * e2d::GC::getInstance()
{
return &_instance;
}
2018-05-19 01:10:37 +08:00
void e2d::GC::notify()
2017-10-14 01:07:34 +08:00
{
_notifyed = true;
2017-10-14 01:07:34 +08:00
}
2018-05-19 01:10:37 +08:00
void e2d::GC::flush()
{
GC::notify();
GC::__update();
}