Fixed a lot of memory leaks caused by static globals never getting

deleted and some other objects not getting deleted properly due to missing
destructors.
This commit is contained in:
Shenjoku
2013-04-18 21:17:57 -07:00
parent 5f7001ef0a
commit 01456ed0b9
29 changed files with 239 additions and 171 deletions
+15 -9
View File
@@ -14,22 +14,26 @@
// Actor registration
static map<RString,CreateActorFn> *g_pmapRegistrees = NULL;
map<RString,CreateActorFn> & GetRegistrees()
{
static map<RString, CreateActorFn> registrees;
return registrees;
}
static bool IsRegistered( const RString& sClassName )
{
return g_pmapRegistrees->find( sClassName ) != g_pmapRegistrees->end();
map<RString, CreateActorFn> & registrees = GetRegistrees();
return registrees.find( sClassName ) != registrees.end();
}
void ActorUtil::Register( const RString& sClassName, CreateActorFn pfn )
{
if( g_pmapRegistrees == NULL )
g_pmapRegistrees = smnew map<RString,CreateActorFn>;
map<RString, CreateActorFn> & registrees = GetRegistrees();
map<RString,CreateActorFn>::iterator iter = g_pmapRegistrees->find( sClassName );
ASSERT_M( iter == g_pmapRegistrees->end(), ssprintf("Actor class '%s' already registered.", sClassName.c_str()) );
map<RString,CreateActorFn>::iterator iter = registrees.find( sClassName );
ASSERT_M( iter == registrees.end(), ssprintf("Actor class '%s' already registered.", sClassName.c_str()) );
(*g_pmapRegistrees)[sClassName] = pfn;
registrees[sClassName] = pfn;
}
bool ActorUtil::ResolvePath( RString &sPath, const RString &sName )
@@ -119,8 +123,10 @@ Actor* ActorUtil::LoadFromNode( const XNode* pNode, Actor *pParentActor )
if( !bHasClass )
bHasClass = pNode->GetAttrValue( "Type", sClass );
map<RString,CreateActorFn>::iterator iter = g_pmapRegistrees->find( sClass );
if( iter == g_pmapRegistrees->end() )
map<RString, CreateActorFn> & registrees = GetRegistrees();
map<RString,CreateActorFn>::iterator iter = registrees.find( sClass );
if( iter == registrees.end() )
{
// sClass is invalid
RString sError = ssprintf( "%s: invalid Class \"%s\"",