diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | src/resources/spritedef.cpp | 16 |
2 files changed, 17 insertions, 0 deletions
@@ -17,6 +17,7 @@ * src/gui/inventorywindow.cpp, src/gui/inventorywindow.h: Removed redundant destructor. * src/resources/monsterdb.cpp: Plugged memory leak in database reader. + * src/resources/spritedef.cpp: Plugged memory leak in sprites. 2007-10-20 Guillaume Melquiond <guillaume.melquiond@gmail.com> diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp index 0daa0cc0..45a52d2e 100644 --- a/src/resources/spritedef.cpp +++ b/src/resources/spritedef.cpp @@ -21,6 +21,8 @@ * $Id$ */ +#include <set> + #include "spritedef.h" #include "../log.h" @@ -289,6 +291,20 @@ SpriteDef::substituteAction(SpriteAction complete, SpriteAction with) SpriteDef::~SpriteDef() { + // Actions are shared, so ensure they are deleted only once. + std::set< Action * > actions; + for (Actions::const_iterator i = mActions.begin(), + i_end = mActions.end(); i != i_end; ++i) + { + actions.insert(i->second); + } + + for (std::set< Action * >::const_iterator i = actions.begin(), + i_end = actions.end(); i != i_end; ++i) + { + delete *i; + } + for (ImageSetIterator i = mImageSets.begin(); i != mImageSets.end(); ++i) { |