From 29eea1d39cb441d7ec9f61895ee0cabfc504cdb2 Mon Sep 17 00:00:00 2001 From: "techdragon.nguyen@gmail.com" Date: Thu, 21 Apr 2011 06:35:44 +0000 Subject: [PATCH] fixed a memory leak. Not sure how it got introduced but the destructor for DeckManager now does the heavy lifting for memory cleanup and not the static method EndInstance(). reorganized DeckMetaData method LoadDeck so that it appears underneath the constructor. --- projects/mtg/src/DeckManager.cpp | 52 +++++++++++++++---------------- projects/mtg/src/DeckMetaData.cpp | 46 ++++++++++++++------------- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/projects/mtg/src/DeckManager.cpp b/projects/mtg/src/DeckManager.cpp index d0cd5c29d..ab27dd849 100644 --- a/projects/mtg/src/DeckManager.cpp +++ b/projects/mtg/src/DeckManager.cpp @@ -164,33 +164,7 @@ bool DeckManager::instanceFlag = false; void DeckManager::EndInstance() { - if (mInstance) - { - - map::iterator it; - vector::iterator metaDataIter; - - for (it = mInstance->aiDeckStatsMap.begin(); it != mInstance->aiDeckStatsMap.end(); it++){ - SAFE_DELETE(it->second); - } - for (it = mInstance->playerDeckStatsMap.begin(); it != mInstance->playerDeckStatsMap.end(); it++){ - SAFE_DELETE(it->second); - } - - for( metaDataIter = mInstance->aiDeckOrderList.begin(); metaDataIter != mInstance->aiDeckOrderList.end(); ++metaDataIter) - { - SAFE_DELETE( *metaDataIter ); - } - for( metaDataIter = mInstance->playerDeckOrderList.begin(); metaDataIter != mInstance->playerDeckOrderList.end(); ++metaDataIter) - { - SAFE_DELETE( *metaDataIter ); - } - mInstance->aiDeckOrderList.clear(); - mInstance->playerDeckOrderList.clear(); - mInstance->aiDeckStatsMap.clear(); - mInstance->playerDeckStatsMap.clear(); - SAFE_DELETE( mInstance ); - } + SAFE_DELETE(mInstance); } DeckManager* DeckManager::GetInstance() @@ -215,4 +189,28 @@ int DeckManager::getDifficultyRating(Player *statsPlayer, Player *player) DeckManager::~DeckManager() { instanceFlag = false; + map::iterator it; + vector::iterator metaDataIter; + + for (it = mInstance->aiDeckStatsMap.begin(); it != mInstance->aiDeckStatsMap.end(); it++){ + SAFE_DELETE(it->second); + } + for (it = mInstance->playerDeckStatsMap.begin(); it != mInstance->playerDeckStatsMap.end(); it++){ + SAFE_DELETE(it->second); + } + + for( metaDataIter = mInstance->aiDeckOrderList.begin(); metaDataIter != mInstance->aiDeckOrderList.end(); ++metaDataIter) + { + SAFE_DELETE( *metaDataIter ); + } + + for( metaDataIter = mInstance->playerDeckOrderList.begin(); metaDataIter != mInstance->playerDeckOrderList.end(); ++metaDataIter) + { + SAFE_DELETE( *metaDataIter ); + } + + aiDeckOrderList.clear(); + playerDeckOrderList.clear(); + aiDeckStatsMap.clear(); + playerDeckStatsMap.clear(); } diff --git a/projects/mtg/src/DeckMetaData.cpp b/projects/mtg/src/DeckMetaData.cpp index 90220990f..c2fa03030 100644 --- a/projects/mtg/src/DeckMetaData.cpp +++ b/projects/mtg/src/DeckMetaData.cpp @@ -21,6 +21,30 @@ DeckMetaData::DeckMetaData(const string& filename, bool isAI) LoadDeck(); } + +void DeckMetaData::LoadDeck() +{ + if (!mDeckLoaded) + { + MTGDeck deck(mFilename.c_str(), NULL, 1); + mName = trim(deck.meta_name); + mDescription = trim(deck.meta_desc); + mDeckId = atoi((mFilename.substr(mFilename.find("deck") + 4, mFilename.find(".txt"))).c_str()); + mDeckLoaded = true; + if (!mIsAI) + mAvatarFilename = "avatar.jpg"; + else + { + ostringstream avatarFilename; + avatarFilename << "avatar" << getAvatarId() << ".jpg"; + mAvatarFilename = avatarFilename.str(); + } + } + + +} + + void DeckMetaData::LoadStats() { if (!mStatsLoaded) @@ -73,28 +97,6 @@ int DeckMetaData::getAvatarId() return mDeckId % 100; } -void DeckMetaData::LoadDeck() -{ - if (!mDeckLoaded) - { - MTGDeck deck(mFilename.c_str(), NULL, 1); - mName = trim(deck.meta_name); - mDescription = trim(deck.meta_desc); - mDeckId = atoi((mFilename.substr(mFilename.find("deck") + 4, mFilename.find(".txt"))).c_str()); - mDeckLoaded = true; - if (!mIsAI) - mAvatarFilename = "avatar.jpg"; - else - { - ostringstream avatarFilename; - avatarFilename << "avatar" << getAvatarId() << ".jpg"; - mAvatarFilename = avatarFilename.str(); - } - } - - -} - //Accessors string DeckMetaData::getFilename()