From 66e147309698d8cc5ce7da10d4cd2e1e216c3786 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 25 Mar 2019 15:29:17 +0100 Subject: [PATCH] Use move more consistently in QScopedValueRollback Use move on the existing value as well so the constructor makes more of a difference. Change-Id: Iee2080da7b7d2d88eb108f0448c61423c7256979 Reviewed-by: Richard Moe Gustavsen Reviewed-by: Thiago Macieira --- src/corelib/tools/qscopedvaluerollback.h | 14 +++++++------- .../tst_qscopedvaluerollback.cpp | 13 +++++++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/corelib/tools/qscopedvaluerollback.h b/src/corelib/tools/qscopedvaluerollback.h index 5f76269388..f904b8dfcb 100644 --- a/src/corelib/tools/qscopedvaluerollback.h +++ b/src/corelib/tools/qscopedvaluerollback.h @@ -48,20 +48,20 @@ template class QScopedValueRollback { public: - explicit QScopedValueRollback(T &var) : - varRef(var), oldValue(var) + explicit QScopedValueRollback(T &var) + : varRef(var), oldValue(var) { } - explicit QScopedValueRollback(T &var, T value) : - varRef(var), oldValue(var) + explicit QScopedValueRollback(T &var, T value) + : varRef(var), oldValue(std::move(var)) { - varRef = qMove(value); + varRef = std::move(value); } ~QScopedValueRollback() { - varRef = qMove(oldValue); + varRef = std::move(oldValue); } void commit() @@ -70,7 +70,7 @@ public: } private: - T& varRef; + T &varRef; T oldValue; Q_DISABLE_COPY(QScopedValueRollback) diff --git a/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp b/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp index 656dd6a6e3..9b607db608 100644 --- a/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp +++ b/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp @@ -46,6 +46,7 @@ private Q_SLOTS: void rollbackToPreviousCommit(); void exceptions(); void earlyExitScope(); + void moveOnly(); private: void earlyExitScope_helper(int exitpoint, int &member); }; @@ -190,5 +191,17 @@ void tst_QScopedValueRollback::earlyExitScope_helper(int exitpoint, int& member) r.commit(); } +void tst_QScopedValueRollback::moveOnly() +{ + std::unique_ptr uniquePtr; + std::unique_ptr newVal(new int(5)); + QVERIFY(!uniquePtr); + { + QScopedValueRollback> r(uniquePtr, std::move(newVal)); + QVERIFY(uniquePtr); + } + QVERIFY(!uniquePtr); +} + QTEST_MAIN(tst_QScopedValueRollback) #include "tst_qscopedvaluerollback.moc"