diff --git a/qmake/library/proitems.cpp b/qmake/library/proitems.cpp index ba817596c50..a8f4dfe0394 100644 --- a/qmake/library/proitems.cpp +++ b/qmake/library/proitems.cpp @@ -404,8 +404,7 @@ void ProStringList::removeEmpty() void ProStringList::removeDuplicates() { - QDuplicateTracker seen; - seen.reserve(size()); + QDuplicateTracker seen(size()); removeIf([&](const ProString &s) { return seen.hasSeen(s); }); } diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index 936218608b4..864fb7a5d99 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -416,8 +416,7 @@ void QResourcePrivate::ensureChildren() const QString path = absoluteFilePath, k; if (path.startsWith(QLatin1Char(':'))) path = path.mid(1); - QDuplicateTracker kids; - kids.reserve(related.size()); + QDuplicateTracker kids(related.size()); QString cleaned = cleanPath(path); for (int i = 0; i < related.size(); ++i) { QResourceRoot *res = related.at(i); diff --git a/src/corelib/text/qstringlist.cpp b/src/corelib/text/qstringlist.cpp index 440e26bc894..c2eea609ea4 100644 --- a/src/corelib/text/qstringlist.cpp +++ b/src/corelib/text/qstringlist.cpp @@ -648,8 +648,7 @@ qsizetype QtPrivate::QStringList_lastIndexOf(const QStringList *that, const QReg */ qsizetype QtPrivate::QStringList_removeDuplicates(QStringList *that) { - QDuplicateTracker seen; - seen.reserve(that->size()); + QDuplicateTracker seen(that->size()); return that->removeIf([&](const QString &s) { return seen.hasSeen(s); }); } diff --git a/src/corelib/tools/qduplicatetracker_p.h b/src/corelib/tools/qduplicatetracker_p.h index 7bc416140ab..565d592ac2c 100644 --- a/src/corelib/tools/qduplicatetracker_p.h +++ b/src/corelib/tools/qduplicatetracker_p.h @@ -106,6 +106,14 @@ class QDuplicateTracker { Q_DISABLE_COPY_MOVE(QDuplicateTracker); public: QDuplicateTracker() = default; + explicit QDuplicateTracker(qsizetype n) +#ifdef __cpp_lib_memory_resource + : set{size_t(n), &res} +#else + : set{n} +#endif + {} + Q_DECL_DEPRECATED_X("Pass the capacity to reserve() to the ctor instead.") void reserve(qsizetype n) { set.reserve(n); } [[nodiscard]] bool hasSeen(const T &s) { diff --git a/src/gui/text/unix/qfontconfigdatabase.cpp b/src/gui/text/unix/qfontconfigdatabase.cpp index c9f3c3cb813..ee9d3237476 100644 --- a/src/gui/text/unix/qfontconfigdatabase.cpp +++ b/src/gui/text/unix/qfontconfigdatabase.cpp @@ -810,8 +810,7 @@ QStringList QFontconfigDatabase::fallbacksForFamily(const QString &family, QFont FcPatternDestroy(pattern); if (fontSet) { - QDuplicateTracker duplicates; - duplicates.reserve(fontSet->nfont + 1); + QDuplicateTracker duplicates(fontSet->nfont + 1); (void)duplicates.hasSeen(family.toCaseFolded()); for (int i = 0; i < fontSet->nfont; i++) { FcChar8 *value = nullptr; diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index bce75644f5c..d57e43b59df 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -1833,7 +1833,7 @@ void Moc::checkProperties(ClassDef *cdef) // specify get function, for compatibiliy we accept functions // returning pointers, or const char * for QByteArray. // - QDuplicateTracker definedProperties; + QDuplicateTracker definedProperties(cdef->propertyList.count()); for (int i = 0; i < cdef->propertyList.count(); ++i) { PropertyDef &p = cdef->propertyList[i]; if (definedProperties.hasSeen(p.name)) { diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index b684282e9d9..b9af2ce8af1 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -3101,8 +3101,7 @@ QList QTreeWidget::selectedItems() const const QModelIndexList indexes = selectionModel()->selectedIndexes(); QList items; items.reserve(indexes.count()); - QDuplicateTracker seen; - seen.reserve(indexes.count()); + QDuplicateTracker seen(indexes.count()); for (const auto &index : indexes) { QTreeWidgetItem *item = d->item(index); if (item->isHidden() || seen.hasSeen(item)) diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index 226c1ecbf94..74037eba195 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -2625,8 +2625,7 @@ void QStyleSheetStyle::setProperties(QWidget *w) { // scan decls for final occurrence of each "qproperty" - QDuplicateTracker propertySet; - propertySet.reserve(decls.size()); + QDuplicateTracker propertySet(decls.size()); for (int i = decls.count() - 1; i >= 0; --i) { const QString property = decls.at(i).d->property; if (!property.startsWith(QLatin1String("qproperty-"), Qt::CaseInsensitive)) diff --git a/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp b/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp index f4f038ca940..6462ef0dd77 100644 --- a/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp +++ b/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp @@ -168,8 +168,7 @@ size_t qHash(const ConstructionCounted &c, std::size_t seed = 0) void tst_QDuplicateTracker::appendTo_special() { - QDuplicateTracker tracker; - tracker.reserve(3); + QDuplicateTracker tracker(3); QVERIFY(!tracker.hasSeen(1)); QVERIFY(!tracker.hasSeen(2)); QVERIFY(!tracker.hasSeen(3));