diff --git a/src/categorizedcontactmodel.cpp b/src/categorizedcontactmodel.cpp index 87cdbcd6a09ce606cdf95db488ccaa7a7259dccb..f4fa3dcbf5c8d2967e2ee61f5f8137853e3227c2 100644 --- a/src/categorizedcontactmodel.cpp +++ b/src/categorizedcontactmodel.cpp @@ -99,7 +99,7 @@ public: bool m_SortAlphabetical ; QString m_DefaultCategory ; bool m_UnreachableHidden; - SortingCategory::ModelTuple* m_pSortedProxy ; + SortingCategory::ModelTuple* m_pSortedProxy {nullptr}; CategorizedContactModel::SortedProxy m_pProxies ; //Helper @@ -260,6 +260,9 @@ CategorizedContactModel::~CategorizedContactModel() foreach(ContactTreeNode* item,d_ptr->m_lCategoryCounter) { delete item; } + + if (d_ptr->m_pSortedProxy) + delete d_ptr->m_pSortedProxy; } CategorizedContactModel& CategorizedContactModel::instance() diff --git a/src/categorizedhistorymodel.cpp b/src/categorizedhistorymodel.cpp index a8910074dc744abe03f945fdfbf7e61e6f4c4fa4..d3c784d33e44ebba7273631847d5cc20ec22e248 100644 --- a/src/categorizedhistorymodel.cpp +++ b/src/categorizedhistorymodel.cpp @@ -62,7 +62,7 @@ public: QVector<HistoryNode*> m_lCategoryCounter ; QHash<int,HistoryNode*> m_hCategories ; QHash<QString,HistoryNode*> m_hCategoryByName ; - SortingCategory::ModelTuple* m_pSortedProxy ; + SortingCategory::ModelTuple* m_pSortedProxy {nullptr}; int m_Role ; QStringList m_lMimes ; CategorizedHistoryModel::SortedProxy m_pProxies; @@ -128,6 +128,9 @@ CategorizedHistoryModel::~CategorizedHistoryModel() delete item; } + + if (d_ptr->m_pSortedProxy) + delete d_ptr->m_pSortedProxy; } QHash<int,QByteArray> CategorizedHistoryModel::roleNames() const diff --git a/src/collectioninterface.cpp b/src/collectioninterface.cpp index 0e28a025380a703126e90adce633cf23a61c1e85..8cc75c16d15046485ccbf0209d3f36908733803c 100644 --- a/src/collectioninterface.cpp +++ b/src/collectioninterface.cpp @@ -80,6 +80,8 @@ void CollectionInterface::init() ///Destructor CollectionInterface::~CollectionInterface() { + d_ptr->m_fDestruct(); + delete d_ptr2; delete d_ptr; } diff --git a/src/collectioninterface.hpp b/src/collectioninterface.hpp index 9060e07a3df7e1b9675a37b36d810ac03ada4d0e..75a7250c2712e600c8b97a56094ef4ca91b9d38e 100644 --- a/src/collectioninterface.hpp +++ b/src/collectioninterface.hpp @@ -41,11 +41,15 @@ public: std::function<bool(ItemBase*)> m_fSave ; std::function<bool(ItemBase*)> m_fEdit ; std::function<bool(ItemBase*)> m_fRemove ; - std::function<int() > m_fSize ; + std::function<int() > m_fSize ; + std::function<void() > m_fDestruct ; std::function<CollectionConfigurationInterface*()> m_fConfigurator; }; +/** + * The collection from now on take ownership of the editor + */ template<typename T> CollectionInterface::CollectionInterface(CollectionEditor<T>* editor, CollectionInterface* parent) : d_ptr(new CollectionInterfacePrivateT()) @@ -72,6 +76,9 @@ d_ptr(new CollectionInterfacePrivateT()) d_ptr->m_fSize = [editor]()->int { return editor?editor->items().size() : 0; }; + d_ptr->m_fDestruct = [editor]() { + delete editor; + }; } template<typename T> diff --git a/src/collectionmediator.h b/src/collectionmediator.h index 6b45e5389f7eec8cd342fa9ea56838c7fa66804b..1bd22833df4191ad9bbaadba53131e6fe55cd034 100644 --- a/src/collectionmediator.h +++ b/src/collectionmediator.h @@ -39,6 +39,7 @@ template<typename T> class LIB_EXPORT CollectionMediator { public: CollectionMediator(CollectionManagerInterface<T>* parentManager, QAbstractItemModel* m); + virtual ~CollectionMediator(); bool addItem (const T* item); bool removeItem(const T* item); diff --git a/src/collectionmediator.hpp b/src/collectionmediator.hpp index d3f90d856dfad9a7f82e173e444d9321094a1580..13e8961353ad69ca1e54c5b194d9bf3c339b91ce 100644 --- a/src/collectionmediator.hpp +++ b/src/collectionmediator.hpp @@ -34,6 +34,12 @@ CollectionMediator<T>::CollectionMediator(CollectionManagerInterface<T>* parentM d_ptr->m_pModel = m; } +template<typename T> +CollectionMediator<T>::~CollectionMediator() +{ + delete d_ptr; +} + template<typename T> bool CollectionMediator<T>::addItem(const T* item) { diff --git a/src/collectionmodel.cpp b/src/collectionmodel.cpp index 6c471d8c903352f9c2d5c24e838f0ba679df51ad..8c7bbecc74a79ec0c56a6e136bc93c3a6bf0ed0f 100644 --- a/src/collectionmodel.cpp +++ b/src/collectionmodel.cpp @@ -42,6 +42,17 @@ CollectionModelPrivate::CollectionModelPrivate(CollectionModel* parent) : QObjec m_pManageableProxy(nullptr),m_NewCollectionMutex(QMutex::Recursive) {} + +CollectionModelPrivate::~CollectionModelPrivate() +{ +} + +CollectionModelPrivate::ProxyItem::~ProxyItem() +{ + foreach(ProxyItem* i, m_Children) + delete i; +} + CollectionModel::CollectionModel(QObject* parent) : QAbstractTableModel(parent), d_ptr(new CollectionModelPrivate(this)) { load(); diff --git a/src/localbookmarkcollection.cpp b/src/localbookmarkcollection.cpp index 1d443ca2229d2f0118c985b5af4b2fc6229e1997..20b41038b5324ae0d747e7076d6f2a72db63eca3 100644 --- a/src/localbookmarkcollection.cpp +++ b/src/localbookmarkcollection.cpp @@ -80,7 +80,7 @@ public: constexpr const char LocalBookmarkCollectionPrivate::FILENAME[]; LocalBookmarkCollection::LocalBookmarkCollection(CollectionMediator<ContactMethod>* mediator) : - CollectionInterface(new LocalBookmarkEditor(mediator)) + CollectionInterface(new LocalBookmarkEditor(mediator)), d_ptr(new LocalBookmarkCollectionPrivate()) { load(); } diff --git a/src/media/recordingmodel.cpp b/src/media/recordingmodel.cpp index 84d3cebe3fd6d162dde361d38f00496cbe47ee93..fc1eed58b8233de4ec93d11dd835a1b6f9897c07 100644 --- a/src/media/recordingmodel.cpp +++ b/src/media/recordingmodel.cpp @@ -31,8 +31,9 @@ //DRing #include "dbus/configurationmanager.h" -struct RecordingNode +struct RecordingNode final { + ~RecordingNode(); enum class Type { TOP_LEVEL, @@ -52,16 +53,17 @@ struct RecordingNode }; -class RecordingModelPrivate : public QObject +class RecordingModelPrivate final : public QObject { Q_OBJECT public: - RecordingModelPrivate(Media::RecordingModel* parent); + explicit RecordingModelPrivate(Media::RecordingModel* parent); + ~RecordingModelPrivate(); //Attributes QVector<RecordingNode*> m_lCategories ; - RecordingNode* m_pText ; - RecordingNode* m_pAudioVideo ; + RecordingNode* m_pText {nullptr}; + RecordingNode* m_pAudioVideo {nullptr}; LocalTextRecordingCollection* m_pTextRecordingCollection; int m_UnreadCount ; @@ -80,12 +82,30 @@ RecordingNode::RecordingNode(RecordingNode::Type type) : } +RecordingNode::~RecordingNode() +{ + foreach(RecordingNode* c, m_lChildren) + delete c; +} + RecordingModelPrivate::RecordingModelPrivate(Media::RecordingModel* parent) : q_ptr(parent),m_pText(nullptr), m_pAudioVideo(nullptr)/*,m_pFiles(nullptr)*/ { } +RecordingModelPrivate::~RecordingModelPrivate() +{ + if (m_pTextRecordingCollection) + delete m_pTextRecordingCollection; + + if (m_pText) + delete m_pText; + + if (m_pAudioVideo) + delete m_pAudioVideo; +} + void RecordingModelPrivate::forwardInsertion(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction) { Q_UNUSED(message) diff --git a/src/person.cpp b/src/person.cpp index 88c85bfca816d05265448265376992a0e506aaea..37a7dcce47eb95c1017867d9338da5b7ae08211a 100644 --- a/src/person.cpp +++ b/src/person.cpp @@ -41,9 +41,11 @@ #include "media/textrecording.h" #include "mime.h" -class AddressPrivate +class AddressPrivate final { public: + ~AddressPrivate() {} + QString addressLine; QString city; QString zipCode; @@ -57,6 +59,11 @@ Person::Address::Address() : d_ptr(new AddressPrivate()) } +Person::Address::~Address() +{ + //delete d_ptr; //FIXME ASAN doesn't like for some reasons, but also report a leak +} + QString Person::Address::addressLine() const { return d_ptr->addressLine; diff --git a/src/person.h b/src/person.h index 71263fc16cbf73cb47303623ba4b03bde0c279aa..ea236a75d601ef2b86c378654845a7d3204ce8e3 100644 --- a/src/person.h +++ b/src/person.h @@ -69,7 +69,8 @@ public: ///Represent the physical address of a contact class Address { public: - Address(); + explicit Address(); + virtual ~Address(); //Getters QString addressLine() const; diff --git a/src/private/collectionmodel_p.h b/src/private/collectionmodel_p.h index e916ad69ffcc8fd4b916b5e6425aa3176a09191d..261f2f3f020b3a9c1694bd634e24be28386f461a 100644 --- a/src/private/collectionmodel_p.h +++ b/src/private/collectionmodel_p.h @@ -35,7 +35,8 @@ class CollectionModelPrivate final : public QObject { Q_OBJECT public: - CollectionModelPrivate(CollectionModel* parent); + explicit CollectionModelPrivate(CollectionModel* parent); + virtual ~CollectionModelPrivate(); /* * This is not very efficient, it doesn't really have to be given the low @@ -44,6 +45,7 @@ public: */ struct ProxyItem { ProxyItem() : parent(nullptr),col(0),row(0),collection(nullptr),manageableCount(0){} + virtual ~ProxyItem(); int row; int col; CollectionInterface* collection; diff --git a/src/profilemodel.cpp b/src/profilemodel.cpp index c7409b1d883d5782e36a5235f009cc01cd836d61..69ff8cc54ca15dcfce86d06431727410379a2c0e 100644 --- a/src/profilemodel.cpp +++ b/src/profilemodel.cpp @@ -124,6 +124,8 @@ struct Node final virtual ~Node() { QObject::disconnect(m_ChangedConn); + foreach( Node* n, children) + delete n; } enum class Type : bool {