summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2023-01-09 08:13:29 +0100
committerMarc Mutz <marc.mutz@qt.io>2023-01-13 17:20:55 +0100
commit595360506d18210c614ad8eacf5a1819ae91704e (patch)
tree9d446f7bd52d3d143f4bdc01f2e122157470651b /src
parent0cd153b2681437b91f07315a27238446cc24363f (diff)
QSqlRecord: add missing C++11 move SMFs
[ChangeLog][QtSql][QSqlRecord] Added move constructor, -assignment operator, and swap(). Task-number: QTBUG-109938 Change-Id: I54f2666defbf56f5ba2faea6358722ebd7cac157 Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/sql/kernel/qsqlrecord.cpp35
-rw-r--r--src/sql/kernel/qsqlrecord.h5
2 files changed, 38 insertions, 2 deletions
diff --git a/src/sql/kernel/qsqlrecord.cpp b/src/sql/kernel/qsqlrecord.cpp
index a3c6a9debf..bd2be0fc7a 100644
--- a/src/sql/kernel/qsqlrecord.cpp
+++ b/src/sql/kernel/qsqlrecord.cpp
@@ -89,6 +89,37 @@ QSqlRecord::QSqlRecord(const QSqlRecord& other)
}
/*!
+ \fn QSqlRecord::QSqlRecord(QSqlRecord &&other)
+ \since 6.6
+
+ Move-constructs a new QSqlRecord from \a other.
+
+ \note The moved-from object \a other is placed in a partially-formed state,
+ in which the only valid operations are destruction and assignment of a new
+ value.
+*/
+
+/*!
+ \fn QSqlRecord &QSqlRecord::operator=(QSqlRecord &&other)
+ \since 6.6
+
+ Move-assigns \a other to this QSqlRecord instance.
+
+ \note The moved-from object \a other is placed in a partially-formed state,
+ in which the only valid operations are destruction and assignment of a new
+ value.
+*/
+
+/*!
+ \fn void QSqlRecord::swap(QSqlRecord &other)
+ \since 6.6
+
+ Swaps SQL record \a other with this SQL record. This operation is very fast
+ and never fails.
+*/
+
+
+/*!
Sets the record equal to \a other.
QSqlRecord is \l{implicitly shared}. This means you can make copies
@@ -97,7 +128,7 @@ QSqlRecord::QSqlRecord(const QSqlRecord& other)
QSqlRecord& QSqlRecord::operator=(const QSqlRecord& other)
{
- qAtomicAssign(d, other.d);
+ QSqlRecord(other).swap(*this);
return *this;
}
@@ -107,7 +138,7 @@ QSqlRecord& QSqlRecord::operator=(const QSqlRecord& other)
QSqlRecord::~QSqlRecord()
{
- if (!d->ref.deref())
+ if (d && !d->ref.deref())
delete d;
}
diff --git a/src/sql/kernel/qsqlrecord.h b/src/sql/kernel/qsqlrecord.h
index cb88f1c62e..76e6ee982d 100644
--- a/src/sql/kernel/qsqlrecord.h
+++ b/src/sql/kernel/qsqlrecord.h
@@ -19,9 +19,14 @@ class Q_SQL_EXPORT QSqlRecord
public:
QSqlRecord();
QSqlRecord(const QSqlRecord& other);
+ QSqlRecord(QSqlRecord &&other) noexcept
+ : d{std::exchange(other.d, nullptr)} {}
QSqlRecord& operator=(const QSqlRecord& other);
+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QSqlRecord)
~QSqlRecord();
+ void swap(QSqlRecord &other) noexcept { qt_ptr_swap(d, other.d); }
+
bool operator==(const QSqlRecord &other) const;
inline bool operator!=(const QSqlRecord &other) const { return !operator==(other); }