diff options
-rw-r--r-- | src/corelib/kernel/qpointer.cpp | 8 | ||||
-rw-r--r-- | src/corelib/kernel/qpointer.h | 2 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp | 17 |
3 files changed, 27 insertions, 0 deletions
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 @@ -128,6 +128,14 @@ */ /*! + \fn void QPointer::swap(QPointer<T> &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<T> & QPointer::operator=(T* p) Assignment operator. This guarded pointer will now point to the 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<T> &operator=(T* p) { wp.assign(static_cast<QObjectType*>(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<QObject> 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<QObject> p1; |