diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-09-07 14:16:06 +0200 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2023-09-11 06:29:54 +0000 |
commit | 6ad23dc4026b87b973ac2f2db208857105e14fea (patch) | |
tree | c08b2049958567813621446fa3e6b15c457aed55 /src/qml/types/qqmlbind.cpp | |
parent | b402b8c38c6eb02d12058416caba1e838ce3f411 (diff) |
QQmlBind: Move delayedName into place rather than taking it by const refv6.6.0-beta4
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 <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 034cd962f5196b4d729459f01869169b37956597)
Diffstat (limited to 'src/qml/types/qqmlbind.cpp')
-rw-r--r-- | src/qml/types/qqmlbind.cpp | 10 |
1 files 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<QQmlPropertyMap>(); 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)); } |