Revert "Implement move-ctor and move-assignment-op for QScopedPointer"

This reverts commit 5b9006bbdb.

Also revert "Doc: Enable documentation for QScopedPointer's rvalue ref functions"

This reverts commit 5f8416ec65.

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>
This commit is contained in:
Stephen Kelly 2013-09-03 09:44:30 +02:00 committed by The Qt Project
parent 5a02d30a78
commit 3f6ed5566f
4 changed files with 0 additions and 194 deletions

View File

@ -133,31 +133,6 @@ QT_BEGIN_NAMESPACE
Constructs this QScopedPointer instance and sets its pointer to \a p.
*/
/*!
\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()

View File

@ -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);

View File

@ -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

View File

@ -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"