From 6ad23dc4026b87b973ac2f2db208857105e14fea Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Thu, 7 Sep 2023 14:16:06 +0200 Subject: QQmlBind: Move delayedName into place rather than taking it by const ref Using a const reference triggers QTBUG-116742 because the refcounting fails in some non-obvious way. Moving the string into place avoids touching the refcount. Task-number: QTBUG-116742 Change-Id: I9195ad84ac2c97d6624cd29e4c747f66c7919b09 Reviewed-by: Qt CI Bot Reviewed-by: Volker Hilsheimer (cherry picked from commit 034cd962f5196b4d729459f01869169b37956597) --- src/qml/types/qqmlbind.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/qml/types/qqmlbind.cpp b/src/qml/types/qqmlbind.cpp index cdca6e89d4..53f1a90c82 100644 --- a/src/qml/types/qqmlbind.cpp +++ b/src/qml/types/qqmlbind.cpp @@ -281,7 +281,7 @@ public: const QV4::CompiledData::Binding *binding, QQmlComponentPrivate::ConstructionState *immediateState); void createDelayedValues(); - void onDelayedValueChanged(const QString &delayedName); + void onDelayedValueChanged(QString delayedName); void evalDelayed(); void buildBindEntries(QQmlBind *q, QQmlComponentPrivate::DeferredState *deferredState); }; @@ -898,14 +898,14 @@ void QQmlBindPrivate::createDelayedValues() delayedValues = std::make_unique(); QObject::connect( delayedValues.get(), &QQmlPropertyMap::valueChanged, - delayedValues.get(), [this](const QString &delayedName, const QVariant &value) { + delayedValues.get(), [this](QString delayedName, const QVariant &value) { Q_UNUSED(value); - onDelayedValueChanged(delayedName); + onDelayedValueChanged(std::move(delayedName)); } ); } -void QQmlBindPrivate::onDelayedValueChanged(const QString &delayedName) +void QQmlBindPrivate::onDelayedValueChanged(QString delayedName) { Q_ASSERT(delayed); Q_ASSERT(delayedValues); @@ -916,7 +916,7 @@ void QQmlBindPrivate::onDelayedValueChanged(const QString &delayedName) else if (pending.contains(delayedName)) return; - pending.append(delayedName); + pending.append(std::move(delayedName)); (*delayedValues)[pendingName].setValue(std::move(pending)); } -- cgit v1.2.3