QWeakPointer: purge deprecated API
Since 5.0: assignment/construction from QObject pointer Since 5.14: data() to recover the packaged pointer Change-Id: I5d6ab561ce39bc0d9d3e5035eb2ca38139cd76b6 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
860c68522b
commit
e40320c552
@ -63,9 +63,6 @@ QT_END_NAMESPACE
|
||||
#include <new>
|
||||
#include <QtCore/qatomic.h>
|
||||
#include <QtCore/qobject.h> // for qobject_cast
|
||||
#if QT_DEPRECATED_SINCE(5, 6)
|
||||
#include <QtCore/qhash.h>
|
||||
#endif
|
||||
#include <QtCore/qhashfunctions.h>
|
||||
|
||||
#include <memory>
|
||||
@ -555,29 +552,9 @@ public:
|
||||
explicit operator bool() const noexcept { return !isNull(); }
|
||||
bool operator !() const noexcept { return isNull(); }
|
||||
|
||||
#if QT_DEPRECATED_SINCE(5, 14)
|
||||
QT_DEPRECATED_X("Use toStrongRef() instead, and data() on the returned QSharedPointer")
|
||||
T *data() const noexcept { return internalData(); }
|
||||
#endif
|
||||
|
||||
inline QWeakPointer() noexcept : d(nullptr), value(nullptr) { }
|
||||
inline ~QWeakPointer() { if (d && !d->weakref.deref()) delete d; }
|
||||
|
||||
#ifndef QT_NO_QOBJECT
|
||||
// special constructor that is enabled only if X derives from QObject
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
template <class X, IfCompatible<X> = true>
|
||||
QT_DEPRECATED inline QWeakPointer(X *ptr) : d(ptr ? Data::getAndRef(ptr) : nullptr), value(ptr)
|
||||
{ }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
template <class X, IfCompatible<X> = true>
|
||||
QT_DEPRECATED inline QWeakPointer &operator=(X *ptr)
|
||||
{ return *this = QWeakPointer(ptr); }
|
||||
#endif
|
||||
|
||||
QWeakPointer(const QWeakPointer &other) noexcept : d(other.d), value(other.value)
|
||||
{ if (d) d->weakref.ref(); }
|
||||
QWeakPointer(QWeakPointer &&other) noexcept
|
||||
|
@ -1938,13 +1938,6 @@ void tst_QMetaType::automaticTemplateRegistration()
|
||||
QCOMPARE(extractedPtr.data()->objectName(), sp.data()->objectName()); \
|
||||
}
|
||||
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
TEST_NONOWNING_SMARTPOINTER(QWeakPointer, QObject, WeakPointerToQObject, qWeakPointerFromVariant)
|
||||
TEST_NONOWNING_SMARTPOINTER(QWeakPointer, QFile, WeakPointerToQObject, qWeakPointerFromVariant)
|
||||
TEST_NONOWNING_SMARTPOINTER(QWeakPointer, QTemporaryFile, WeakPointerToQObject, qWeakPointerFromVariant)
|
||||
TEST_NONOWNING_SMARTPOINTER(QWeakPointer, MyObject, WeakPointerToQObject, qWeakPointerFromVariant)
|
||||
#endif
|
||||
|
||||
TEST_NONOWNING_SMARTPOINTER(QPointer, QObject, TrackingPointerToQObject, qPointerFromVariant)
|
||||
TEST_NONOWNING_SMARTPOINTER(QPointer, QFile, TrackingPointerToQObject, qPointerFromVariant)
|
||||
TEST_NONOWNING_SMARTPOINTER(QPointer, QTemporaryFile, TrackingPointerToQObject, qPointerFromVariant)
|
||||
|
@ -2487,18 +2487,6 @@ void tst_QVariant::qvariant_cast_QObject_wrapper()
|
||||
QVERIFY(spVar.canConvert<QObject*>());
|
||||
QCOMPARE(f, spVar.value<QObject*>());
|
||||
}
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
{
|
||||
QFile *f = new QFile(this);
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_DEPRECATED
|
||||
QWeakPointer<QFile> sp(f);
|
||||
QT_WARNING_POP
|
||||
QVariant spVar = QVariant::fromValue(sp);
|
||||
QVERIFY(spVar.canConvert<QObject*>());
|
||||
QCOMPARE(f, spVar.value<QObject*>());
|
||||
}
|
||||
#endif
|
||||
{
|
||||
QFile *f = new QFile(this);
|
||||
QSharedPointer<QObject> sp(f);
|
||||
|
@ -77,10 +77,6 @@ private slots:
|
||||
void functionCallDownCast();
|
||||
void upCast();
|
||||
void qobjectWeakManagement();
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
void noSharedPointerFromWeakQObject();
|
||||
void sharedPointerFromQObjectWithWeak();
|
||||
#endif
|
||||
void weakQObjectFromSharedPointer();
|
||||
void objectCast();
|
||||
void objectCastStdSharedPtr();
|
||||
@ -956,156 +952,10 @@ void tst_QSharedPointer::qobjectWeakManagement()
|
||||
QVERIFY(weak.isNull());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
{
|
||||
QWeakPointer<QObject> weak;
|
||||
weak = QWeakPointer<QObject>();
|
||||
QVERIFY(weak.isNull());
|
||||
QVERIFY(!weak.data());
|
||||
}
|
||||
|
||||
{
|
||||
QObject *obj = new QObject;
|
||||
QWeakPointer<QObject> weak(obj);
|
||||
QVERIFY(!weak.isNull());
|
||||
QVERIFY(weak.data() == obj);
|
||||
|
||||
// now delete
|
||||
delete obj;
|
||||
QVERIFY(weak.isNull());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
// same, bit with operator=
|
||||
QObject *obj = new QObject;
|
||||
QWeakPointer<QObject> weak;
|
||||
weak = obj;
|
||||
QVERIFY(!weak.isNull());
|
||||
QVERIFY(weak.data() == obj);
|
||||
|
||||
// now delete
|
||||
delete obj;
|
||||
QVERIFY(weak.isNull());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
// delete triggered by parent
|
||||
QObject *obj, *parent;
|
||||
parent = new QObject;
|
||||
obj = new QObject(parent);
|
||||
QWeakPointer<QObject> weak(obj);
|
||||
|
||||
// now delete the parent
|
||||
delete parent;
|
||||
QVERIFY(weak.isNull());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
// same as above, but set the parent after QWeakPointer is created
|
||||
QObject *obj, *parent;
|
||||
obj = new QObject;
|
||||
QWeakPointer<QObject> weak(obj);
|
||||
|
||||
parent = new QObject;
|
||||
obj->setParent(parent);
|
||||
|
||||
// now delete the parent
|
||||
delete parent;
|
||||
QVERIFY(weak.isNull());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
// with two QWeakPointers
|
||||
QObject *obj = new QObject;
|
||||
QWeakPointer<QObject> weak(obj);
|
||||
|
||||
{
|
||||
QWeakPointer<QObject> weak2(obj);
|
||||
QVERIFY(!weak2.isNull());
|
||||
QVERIFY(weak == weak2);
|
||||
}
|
||||
QVERIFY(!weak.isNull());
|
||||
|
||||
delete obj;
|
||||
QVERIFY(weak.isNull());
|
||||
}
|
||||
safetyCheck();
|
||||
|
||||
{
|
||||
// same, but delete the pointer while two QWeakPointers exist
|
||||
QObject *obj = new QObject;
|
||||
QWeakPointer<QObject> weak(obj);
|
||||
|
||||
{
|
||||
QWeakPointer<QObject> weak2(obj);
|
||||
QVERIFY(!weak2.isNull());
|
||||
|
||||
delete obj;
|
||||
QVERIFY(weak.isNull());
|
||||
QVERIFY(weak2.isNull());
|
||||
}
|
||||
QVERIFY(weak.isNull());
|
||||
}
|
||||
safetyCheck();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
void tst_QSharedPointer::noSharedPointerFromWeakQObject()
|
||||
{
|
||||
// you're not allowed to create a QSharedPointer from an unmanaged QObject
|
||||
QObject obj;
|
||||
QWeakPointer<QObject> weak(&obj);
|
||||
|
||||
{
|
||||
QTest::ignoreMessage(QtWarningMsg , "QSharedPointer: cannot create a QSharedPointer from a QObject-tracking QWeakPointer");
|
||||
QSharedPointer<QObject> strong = weak.toStrongRef();
|
||||
QVERIFY(strong.isNull());
|
||||
}
|
||||
{
|
||||
QTest::ignoreMessage(QtWarningMsg , "QSharedPointer: cannot create a QSharedPointer from a QObject-tracking QWeakPointer");
|
||||
QSharedPointer<QObject> strong = weak;
|
||||
QVERIFY(strong.isNull());
|
||||
}
|
||||
|
||||
QCOMPARE(weak.data(), &obj);
|
||||
// if something went wrong, we'll probably crash here
|
||||
}
|
||||
|
||||
void tst_QSharedPointer::sharedPointerFromQObjectWithWeak()
|
||||
{
|
||||
QObject *ptr = new QObject;
|
||||
QWeakPointer<QObject> weak = ptr;
|
||||
{
|
||||
QSharedPointer<QObject> shared(ptr);
|
||||
QVERIFY(!weak.isNull());
|
||||
QCOMPARE(shared.data(), ptr);
|
||||
QCOMPARE(weak.data(), ptr);
|
||||
}
|
||||
QVERIFY(weak.isNull());
|
||||
}
|
||||
#endif
|
||||
|
||||
void tst_QSharedPointer::weakQObjectFromSharedPointer()
|
||||
{
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
{
|
||||
// this is the inverse of the above: you're allowed to create a QWeakPointer
|
||||
// from a managed QObject
|
||||
QSharedPointer<QObject> shared(new QObject);
|
||||
QWeakPointer<QObject> weak = shared.data();
|
||||
QVERIFY(!weak.isNull());
|
||||
|
||||
// delete:
|
||||
shared.clear();
|
||||
QVERIFY(weak.isNull());
|
||||
}
|
||||
#endif
|
||||
{
|
||||
QSharedPointer<QObject> shared(new QObject);
|
||||
QWeakPointer<QObject> weak = shared;
|
||||
@ -2507,52 +2357,6 @@ void tst_QSharedPointer::qvariantCast()
|
||||
}
|
||||
// Intentionally does not compile.
|
||||
// QSharedPointer<int> sop = qSharedPointerFromVariant<int>(v);
|
||||
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
v = QVariant::fromValue(sp.toWeakRef());
|
||||
|
||||
{
|
||||
QWeakPointer<QObject> other = qWeakPointerFromVariant<QObject>(v);
|
||||
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
|
||||
}
|
||||
{
|
||||
QWeakPointer<QIODevice> other = qWeakPointerFromVariant<QIODevice>(v);
|
||||
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
|
||||
}
|
||||
{
|
||||
QWeakPointer<QFile> other = qWeakPointerFromVariant<QFile>(v);
|
||||
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
|
||||
}
|
||||
{
|
||||
QWeakPointer<QThread> other = qWeakPointerFromVariant<QThread>(v);
|
||||
QVERIFY(!other);
|
||||
}
|
||||
|
||||
// Intentionally does not compile.
|
||||
// QWeakPointer<int> sop = qWeakPointerFromVariant<int>(v);
|
||||
|
||||
QFile file;
|
||||
QWeakPointer<QFile> tracking = &file;
|
||||
tracking.data()->setObjectName("A test name");
|
||||
v = QVariant::fromValue(tracking);
|
||||
|
||||
{
|
||||
QWeakPointer<QObject> other = qWeakPointerFromVariant<QObject>(v);
|
||||
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
|
||||
}
|
||||
{
|
||||
QWeakPointer<QIODevice> other = qWeakPointerFromVariant<QIODevice>(v);
|
||||
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
|
||||
}
|
||||
{
|
||||
QWeakPointer<QFile> other = qWeakPointerFromVariant<QFile>(v);
|
||||
QCOMPARE(other.data()->objectName(), QString::fromLatin1("A test name"));
|
||||
}
|
||||
{
|
||||
QWeakPointer<QThread> other = qWeakPointerFromVariant<QThread>(v);
|
||||
QVERIFY(!other);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
class SomeClass : public QEnableSharedFromThis<SomeClass>
|
||||
|
Loading…
x
Reference in New Issue
Block a user