diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2013-11-13 11:37:37 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-11-17 09:47:07 +0100 |
commit | 3e803b5180e7059c01c15ea84cadd54982e1a221 (patch) | |
tree | 4ce472724bf7ef840c270f89e9ccffac523b36ae /src/corelib/tools/qcollator.h | |
parent | 6c04c21c101b70401ad9cb08de1562dc90166e9c (diff) |
QCollator: enable move semantics
This necessitates adding d==0 checks in QCollator. By documenting that
moved-from instances can only be assigned to or destroyed, we can
limit the functions in which to check for d==0 to the assignment
operator and the destructor.
Doing otherwise would destroy all advantages of move semantics by
introducing a heap allocation to re-populate other.d.
Add a test for this (QCollator didn't have any before).
Change-Id: Ic6ff202072822bebfd5e48259c3d0fa345a63118
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/tools/qcollator.h')
-rw-r--r-- | src/corelib/tools/qcollator.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/corelib/tools/qcollator.h b/src/corelib/tools/qcollator.h index e5abc91967..1007aa7623 100644 --- a/src/corelib/tools/qcollator.h +++ b/src/corelib/tools/qcollator.h @@ -85,6 +85,12 @@ public: QCollator(const QCollator &); ~QCollator(); QCollator &operator=(const QCollator &); +#ifdef Q_COMPILER_RVALUE_REFS + QCollator(QCollator &&other) + : d(other.d) { other.d = 0; } + QCollator &operator=(QCollator &&other) + { swap(other); return *this; } +#endif void swap(QCollator &other) { qSwap(d, other.d); } |