From 00055ce76d947ee0a35394edcafee1e85df5da53 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 8 Nov 2013 09:33:50 -0500 Subject: [PATCH] cmExportSetMap: Override clear() to delete held resources Replace the std::map<>::clear() method with one that first deletes the cmExportSet instances held by each map entry, and then clears. Otherwise the cmGlobalGenerator::ClearGeneratorMembers added by commit 5cf1120f (cmGlobalGenerator: Refactor member cleanup between configures, 2013-11-04) leaks the cmExportSet instances. --- Source/cmExportSetMap.cxx | 8 +++++++- Source/cmExportSetMap.h | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Source/cmExportSetMap.cxx b/Source/cmExportSetMap.cxx index 96fdb3e4f..517411887 100644 --- a/Source/cmExportSetMap.cxx +++ b/Source/cmExportSetMap.cxx @@ -23,7 +23,7 @@ cmExportSet* cmExportSetMap::operator[](const std::string &name) return it->second; } -cmExportSetMap::~cmExportSetMap() +void cmExportSetMap::clear() { for(std::map::iterator it = this->begin(); it != this->end(); @@ -31,4 +31,10 @@ cmExportSetMap::~cmExportSetMap() { delete it->second; } + this->derived::clear(); +} + +cmExportSetMap::~cmExportSetMap() +{ + this->clear(); } diff --git a/Source/cmExportSetMap.h b/Source/cmExportSetMap.h index 4663c5538..965046cef 100644 --- a/Source/cmExportSetMap.h +++ b/Source/cmExportSetMap.h @@ -18,6 +18,7 @@ class cmExportSet; /// A name -> cmExportSet map with overloaded operator[]. class cmExportSetMap : public std::map { + typedef std::map derived; public: /** \brief Overloaded operator[]. * @@ -26,6 +27,8 @@ public: */ cmExportSet* operator[](const std::string &name); + void clear(); + /// Overloaded destructor deletes all member export sets. ~cmExportSetMap(); };