QUrlQuery: add missing move constructor

It wasn't added when this class was created in 5.0 because we couldn't
add move constructors and still keep the ability to compile Qt with
C++98 compilers. We've forgot to correct this shortcoming since 5.6.

Fixes: QTBUG-109842
Pick-to: 6.5
Change-Id: I69ecc04064514f939896fffd17376b8243b73c52
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This commit is contained in:
Thiago Macieira 2023-01-05 10:06:33 -03:00 committed by Marc Mutz
parent 3d584b1093
commit fc8dad2f10
3 changed files with 35 additions and 0 deletions

View File

@ -363,6 +363,16 @@ QUrlQuery::QUrlQuery(const QUrlQuery &other)
{
}
/*!
\since 6.5
Moves the contents of the \a other QUrlQuery object, including the query
delimiters.
*/
QUrlQuery::QUrlQuery(QUrlQuery &&other) noexcept
: d(std::move(other.d))
{
}
/*!
Copies the contents of the \a other QUrlQuery object, including the query
delimiters.

View File

@ -30,6 +30,7 @@ public:
}
QUrlQuery(const QUrlQuery &other);
QUrlQuery(QUrlQuery &&other) noexcept;
QUrlQuery &operator=(const QUrlQuery &other);
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QUrlQuery)
~QUrlQuery();

View File

@ -172,6 +172,7 @@ void tst_QUrlQuery::constructing()
QVERIFY(other != empty);
QVERIFY(!(other == empty));
// copy-construct
QUrlQuery copy(other);
QCOMPARE(copy, other);
@ -179,10 +180,33 @@ void tst_QUrlQuery::constructing()
QVERIFY(copy.isEmpty());
QVERIFY(copy != other);
// copy-assign
copy = other;
QVERIFY(!copy.isEmpty());
QCOMPARE(copy, other);
// move-construct
QUrlQuery moved(std::move(other));
QCOMPARE(moved, copy);
// self move-assign
moved = std::move(moved);
QCOMPARE(moved, copy);
// self move-assign of moved-from (Hinnant Criterion)
other = std::move(other);
// shouldn't crash; here, or further down
// copy-assign to moved-from object
other = copy;
QCOMPARE(other, copy);
QCOMPARE(other, moved);
// move-assign
moved = std::move(other);
QCOMPARE(moved, copy);
// (move-)assign default-constructed
copy = QUrlQuery();
QVERIFY(copy.isEmpty());