diff options
| author | Stephen Kelly <stephen.kelly@kdab.com> | 2013-09-03 09:44:30 +0200 |
|---|---|---|
| committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-05 08:20:19 +0200 |
| commit | 3f6ed5566fcfbbba4cadfade460460f8ebf06ad3 (patch) | |
| tree | 213de5a21d8e942daded1c988560d11b76e92709 | |
| parent | 5a02d30a78991240c3355d863f52b0d376ebf911 (diff) | |
Revert "Implement move-ctor and move-assignment-op for QScopedPointer"
This reverts commit 5b9006bbdba7dcab01b8e640554a7d7a4b64f76b.
Also revert "Doc: Enable documentation for QScopedPointer's rvalue ref functions"
This reverts commit 5f8416ec659b134db90df7e7f857db77fd27b6ab.
Adding a move contructor to QScopedPointer makes no sense, because moving
means 'escaping the scope', which breaks the fundamental point of
QScopedPointer.
Change-Id: I4ac1b108bf199af6e436fa1629aa2d3b93c27724
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| -rw-r--r-- | src/corelib/tools/qscopedpointer.cpp | 25 | ||||
| -rw-r--r-- | src/corelib/tools/qscopedpointer.h | 13 | ||||
| -rw-r--r-- | tests/auto/corelib/tools/qscopedpointer/qscopedpointer.pro | 1 | ||||
| -rw-r--r-- | tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp | 155 |
4 files changed, 0 insertions, 194 deletions
diff --git a/src/corelib/tools/qscopedpointer.cpp b/src/corelib/tools/qscopedpointer.cpp index 22155d6d3ad..fb0025c1ff9 100644 --- a/src/corelib/tools/qscopedpointer.cpp +++ b/src/corelib/tools/qscopedpointer.cpp @@ -134,31 +134,6 @@ QT_BEGIN_NAMESPACE */ /*! - \fn QScopedPointer::QScopedPointer(QScopedPointer<T, Cleanup> &&other) - - Move-constructs a QScopedPointer instance, making it point at the same - object that \a other was pointing to. \a other is reset to point to \c{NULL}. - - \since 5.2 -*/ - -/*! - \fn QScopedPointer<T, Cleanup> &operator=(QScopedPointer<T, Cleanup> &&other) - - Move-assigns \a other to this QScopedPointer instance, transferring the - ownership of the managed pointer to this instance. - - If \a other and this instance are actually the same object, this operator - does nothing. - - Otherwise, this instance is set to point to the object \a other - is pointing to, and \a other is set to point to \c{NULL}. - If this instance was pointing to an object, that object is destroyed. - - \since 5.2 -*/ - -/*! \fn QScopedPointer::~QScopedPointer() Destroys this QScopedPointer object. Delete the object its pointer points diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h index dba37dae234..dd6e5bd57b9 100644 --- a/src/corelib/tools/qscopedpointer.h +++ b/src/corelib/tools/qscopedpointer.h @@ -109,19 +109,6 @@ public: Cleanup::cleanup(oldD); } -#ifdef Q_COMPILER_RVALUE_REFS - inline QScopedPointer(QScopedPointer<T, Cleanup> &&other) - : d(other.take()) - { - } - - inline QScopedPointer<T, Cleanup> &operator=(QScopedPointer<T, Cleanup> &&other) - { - reset(other.take()); - return *this; - } -#endif - inline T &operator*() const { Q_ASSERT(d); diff --git a/tests/auto/corelib/tools/qscopedpointer/qscopedpointer.pro b/tests/auto/corelib/tools/qscopedpointer/qscopedpointer.pro index 48a3b9ee9c1..5fa529e1758 100644 --- a/tests/auto/corelib/tools/qscopedpointer/qscopedpointer.pro +++ b/tests/auto/corelib/tools/qscopedpointer/qscopedpointer.pro @@ -1,5 +1,4 @@ CONFIG += testcase parallel_test -contains(QT_CONFIG, c++11):CONFIG += c++11 TARGET = tst_qscopedpointer QT = core testlib SOURCES = tst_qscopedpointer.cpp diff --git a/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp b/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp index cb0382eb660..66ea3e940c3 100644 --- a/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp +++ b/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp @@ -42,8 +42,6 @@ #include <QtTest/QtTest> #include <QtCore/QScopedPointer> -#include <utility> - /*! \class tst_QScopedPointer \internal @@ -75,7 +73,6 @@ private Q_SLOTS: void objectSize(); void comparison(); void array(); - void move(); // TODO instanciate on const object }; @@ -461,158 +458,6 @@ void tst_QScopedPointer::array() QCOMPARE(instCount, RefCounted::instanceCount.load()); } -#ifdef Q_COMPILER_RVALUE_REFS -struct CountedInteger -{ - CountedInteger(int i) : i(i) - { - ++instanceCount; - } - ~CountedInteger() - { - --instanceCount; - } - CountedInteger(const CountedInteger &c) - : i(c.i) - { - ++instanceCount; - } - - static int instanceCount; - int i; -}; - -int CountedInteger::instanceCount = 0; - -QScopedPointer<CountedInteger> returnScopedPointer(int i) -{ - return QScopedPointer<CountedInteger>(new CountedInteger(i)); -} -#endif - -void tst_QScopedPointer::move() -{ -#ifndef Q_COMPILER_RVALUE_REFS - QSKIP("This test requires rvalues refs"); -#else - QCOMPARE(CountedInteger::instanceCount, 0); - - { - QScopedPointer<CountedInteger> p = returnScopedPointer(42); - QVERIFY(!p.isNull()); - QCOMPARE(p->i, 42); - QCOMPARE(CountedInteger::instanceCount, 1); - - QScopedPointer<CountedInteger> q = returnScopedPointer(51); - QVERIFY(!q.isNull()); - QCOMPARE(q->i, 51); - QCOMPARE(CountedInteger::instanceCount, 2); - - q = returnScopedPointer(123); - QVERIFY(!q.isNull()); - QCOMPARE(q->i, 123); - QCOMPARE(CountedInteger::instanceCount, 2); - - p = std::move(q); - QVERIFY(!p.isNull()); - QCOMPARE(p->i, 123); - QVERIFY(q.isNull()); - QCOMPARE(CountedInteger::instanceCount, 1); - - p = std::move(q); - QVERIFY(p.isNull()); - QVERIFY(q.isNull()); - QCOMPARE(CountedInteger::instanceCount, 0); - } - - QCOMPARE(CountedInteger::instanceCount, 0); - - { - QScopedPointer<CountedInteger> p = returnScopedPointer(1024); - QVERIFY(!p.isNull()); - QCOMPARE(p->i, 1024); - QCOMPARE(CountedInteger::instanceCount, 1); - - p.reset(); - QVERIFY(p.isNull()); - QCOMPARE(CountedInteger::instanceCount, 0); - - p = returnScopedPointer(1024); - const CountedInteger * const rawPtr = p.data(); - p = std::move(p); - // now p is in a "valid, but unspecified state". so the test must not crash. - // we do actually know that this move should've been a noop. - QVERIFY(!p.isNull()); - QCOMPARE(p.data(), rawPtr); - QCOMPARE(p->i, 1024); - QCOMPARE(CountedInteger::instanceCount, 1); - - p.reset(); - QVERIFY(p.isNull()); - QCOMPARE(CountedInteger::instanceCount, 0); - } - - QCOMPARE(CountedInteger::instanceCount, 0); - - { - QScopedPointer<CountedInteger> p = returnScopedPointer(-1); - QVERIFY(!p.isNull()); - QCOMPARE(p->i, -1); - QCOMPARE(CountedInteger::instanceCount, 1); - } - - QCOMPARE(CountedInteger::instanceCount, 0); - - { - QScopedPointer<CountedInteger> p = returnScopedPointer(0); - QVERIFY(!p.isNull()); - QCOMPARE(p->i, 0); - QCOMPARE(CountedInteger::instanceCount, 1); - - QScopedPointer<CountedInteger> q; - QVERIFY(q.isNull()); - - p = std::move(q); - QVERIFY(p.isNull()); - QVERIFY(q.isNull()); - QCOMPARE(CountedInteger::instanceCount, 0); - } - - QCOMPARE(CountedInteger::instanceCount, 0); - - { - QScopedPointer<CountedInteger> p; - QVERIFY(p.isNull()); - QCOMPARE(CountedInteger::instanceCount, 0); - - QScopedPointer<CountedInteger> q = returnScopedPointer(123); - QVERIFY(!q.isNull()); - QCOMPARE(q->i, 123); - QCOMPARE(CountedInteger::instanceCount, 1); - - p = std::move(q); - QVERIFY(!p.isNull()); - QCOMPARE(p->i, 123); - QVERIFY(q.isNull()); - QCOMPARE(CountedInteger::instanceCount, 1); - } - - QCOMPARE(CountedInteger::instanceCount, 0); - - { - QScopedPointer<CountedInteger> p; - QVERIFY(p.isNull()); - QCOMPARE(CountedInteger::instanceCount, 0); - - p = returnScopedPointer(2001); - QVERIFY(!p.isNull()); - QCOMPARE(p->i, 2001); - QCOMPARE(CountedInteger::instanceCount, 1); - } - - QCOMPARE(CountedInteger::instanceCount, 0); -#endif -} QTEST_MAIN(tst_QScopedPointer) #include "tst_qscopedpointer.moc" |
