From 2d9700c041b7d19f8204d96b2dc8b37859fbf4f5 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 17 Aug 2014 20:23:22 +0200 Subject: QPointer: add member-swap Change-Id: I5704badc86f98e549c586656ec8df3915632ce15 Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/corelib/kernel/qpointer.cpp | 8 ++++++++ src/corelib/kernel/qpointer.h | 2 ++ tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp | 17 +++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/corelib/kernel/qpointer.cpp b/src/corelib/kernel/qpointer.cpp index 2c872716d1..39cc17f7dd 100644 --- a/src/corelib/kernel/qpointer.cpp +++ b/src/corelib/kernel/qpointer.cpp @@ -127,6 +127,14 @@ pointed to. */ +/*! + \fn void QPointer::swap(QPointer &other) + \since 5.6 + + Swaps the contents of this QPointer with the contents of \a other. + This operation is very fast and never fails. +*/ + /*! \fn QPointer & QPointer::operator=(T* p) diff --git a/src/corelib/kernel/qpointer.h b/src/corelib/kernel/qpointer.h index 07649ce0b2..a3e922ccc9 100644 --- a/src/corelib/kernel/qpointer.h +++ b/src/corelib/kernel/qpointer.h @@ -66,6 +66,8 @@ public: // compiler-generated copy/move ctor/assignment operators are fine! inline ~QPointer() { } + inline void swap(QPointer &other) { wp.swap(other.wp); } + inline QPointer &operator=(T* p) { wp.assign(static_cast(p)); return *this; } diff --git a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp index 814c4bb691..d7cce4ada4 100644 --- a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp +++ b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp @@ -50,6 +50,7 @@ private slots: void destructor(); void assignment_operators(); void equality_operators(); + void swap(); void isNull(); void dereference_operators(); void disconnect(); @@ -169,6 +170,22 @@ void tst_QPointer::equality_operators() #endif } +void tst_QPointer::swap() +{ + QPointer c1, c2; + { + QObject o; + c1 = &o; + QVERIFY(c2.isNull()); + QCOMPARE(c1.data(), &o); + c1.swap(c2); + QVERIFY(c1.isNull()); + QCOMPARE(c2.data(), &o); + } + QVERIFY(c1.isNull()); + QVERIFY(c2.isNull()); +} + void tst_QPointer::isNull() { QPointer p1; -- cgit v1.2.3