diff options
author | Ivan Komissarov <ABBAPOH@gmail.com> | 2018-06-29 16:31:31 +0300 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2018-10-22 16:24:40 +0000 |
commit | 17f4adfe1840f507ada69fa6f25238c4c72064c3 (patch) | |
tree | 37e2cf2732b06518013a7dddd2054fc258b5a4b5 | |
parent | 6c543879a31d7d13a6b87e6332f6913f2f89f5e6 (diff) |
Use std::unique_ptr for memory management in QMimeDataBasePrivate
This change simplifies memory management as long as it doesn't requires
manuall calls to qDeleteAll and manual deleting/nulling pointers.
Change-Id: Id0dc563d0b1e74ae33939d90d4b39999020cd7ce
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-rw-r--r-- | src/corelib/mimetypes/qmimedatabase.cpp | 27 | ||||
-rw-r--r-- | src/corelib/mimetypes/qmimedatabase_p.h | 4 |
2 files changed, 16 insertions, 15 deletions
diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp index 9407b9ced8..a2e99f3816 100644 --- a/src/corelib/mimetypes/qmimedatabase.cpp +++ b/src/corelib/mimetypes/qmimedatabase.cpp @@ -76,7 +76,6 @@ QMimeDatabasePrivate::QMimeDatabasePrivate() QMimeDatabasePrivate::~QMimeDatabasePrivate() { - qDeleteAll(m_providers); } #ifdef QT_BUILD_INTERNAL @@ -116,37 +115,37 @@ void QMimeDatabasePrivate::loadProviders() const QString cacheFile = mimeDir + QStringLiteral("/mime.cache"); QFileInfo fileInfo(cacheFile); // Check if we already have a provider for this dir - const auto it = std::find_if(currentProviders.begin(), currentProviders.end(), [mimeDir](QMimeProviderBase *prov) { return prov->directory() == mimeDir; }); + const auto predicate = [mimeDir](const std::unique_ptr<QMimeProviderBase> &prov) + { + return prov && prov->directory() == mimeDir; + }; + const auto it = std::find_if(currentProviders.begin(), currentProviders.end(), predicate); if (it == currentProviders.end()) { - QMimeProviderBase *provider = nullptr; + std::unique_ptr<QMimeProviderBase> provider; #if defined(QT_USE_MMAP) if (qEnvironmentVariableIsEmpty("QT_NO_MIME_CACHE") && fileInfo.exists()) { - provider = new QMimeBinaryProvider(this, mimeDir); + provider.reset(new QMimeBinaryProvider(this, mimeDir)); //qDebug() << "Created binary provider for" << mimeDir; if (!provider->isValid()) { - delete provider; - provider = nullptr; + provider.reset(); } } #endif if (!provider) { - provider = new QMimeXMLProvider(this, mimeDir); + provider.reset(new QMimeXMLProvider(this, mimeDir)); //qDebug() << "Created XML provider for" << mimeDir; } - m_providers.push_back(provider); + m_providers.push_back(std::move(provider)); } else { - QMimeProviderBase *provider = *it; - currentProviders.erase(it); + auto provider = std::move(*it); // take provider out of the vector provider->ensureLoaded(); if (!provider->isValid()) { - delete provider; - provider = new QMimeXMLProvider(this, mimeDir); + provider.reset(new QMimeXMLProvider(this, mimeDir)); //qDebug() << "Created XML provider to replace binary provider for" << mimeDir; } - m_providers.push_back(provider); + m_providers.push_back(std::move(provider)); } } - qDeleteAll(currentProviders); } const QMimeDatabasePrivate::Providers &QMimeDatabasePrivate::providers() diff --git a/src/corelib/mimetypes/qmimedatabase_p.h b/src/corelib/mimetypes/qmimedatabase_p.h index 4260718af6..05267d83c5 100644 --- a/src/corelib/mimetypes/qmimedatabase_p.h +++ b/src/corelib/mimetypes/qmimedatabase_p.h @@ -63,6 +63,8 @@ #include <QtCore/qmutex.h> #include <QtCore/qvector.h> +#include <memory> + QT_BEGIN_NAMESPACE class QIODevice; @@ -102,7 +104,7 @@ public: bool mimeInherits(const QString &mime, const QString &parent); private: - using Providers = std::vector<QMimeProviderBase *>; + using Providers = std::vector<std::unique_ptr<QMimeProviderBase>>; const Providers &providers(); bool shouldCheck(); void loadProviders(); |