From 8ce66bcbd2ab35c18d2b340e806e787ad439e350 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Sun, 9 May 2010 15:53:28 +0000 Subject: [PATCH] Fix memory leak --- src/mergedproxymodel.cpp | 18 +++++++++++++----- src/mergedproxymodel.h | 2 ++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/mergedproxymodel.cpp b/src/mergedproxymodel.cpp index a1998bcc4..b20d3df0f 100644 --- a/src/mergedproxymodel.cpp +++ b/src/mergedproxymodel.cpp @@ -25,6 +25,18 @@ MergedProxyModel::MergedProxyModel(QObject* parent) { } +MergedProxyModel::~MergedProxyModel() { + DeleteAllMappings(); +} + +void MergedProxyModel::DeleteAllMappings() { + MappingContainer::index::type::iterator begin = + mappings_.get().begin(); + MappingContainer::index::type::iterator end = + mappings_.get().end(); + qDeleteAll(begin, end); +} + void MergedProxyModel::AddSubModel(const QModelIndex& source_parent, const QAbstractItemModel* submodel) { merge_points_.insert(submodel, source_parent); @@ -68,11 +80,7 @@ void MergedProxyModel::setSourceModel(QAbstractItemModel* source_model) { void MergedProxyModel::SourceModelReset() { // Delete all mappings - MappingContainer::index::type::iterator begin = - mappings_.get().begin(); - MappingContainer::index::type::iterator end = - mappings_.get().end(); - qDeleteAll(begin, end); + DeleteAllMappings(); // Clear the containers mappings_.clear(); diff --git a/src/mergedproxymodel.h b/src/mergedproxymodel.h index 7bc3fd867..a6e89f2f8 100644 --- a/src/mergedproxymodel.h +++ b/src/mergedproxymodel.h @@ -39,6 +39,7 @@ class MergedProxyModel : public QAbstractProxyModel { public: MergedProxyModel(QObject* parent = 0); + ~MergedProxyModel(); void AddSubModel(const QModelIndex& source_parent, const QAbstractItemModel* submodel); @@ -67,6 +68,7 @@ class MergedProxyModel : public QAbstractProxyModel { private: QModelIndex GetActualSourceParent(const QModelIndex& source_parent, const QAbstractItemModel* model) const; + void DeleteAllMappings(); struct Mapping { Mapping(const QModelIndex& _source_index) : source_index(_source_index) {}