summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qsharedpointer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools/qsharedpointer.cpp')
-rw-r--r--src/corelib/tools/qsharedpointer.cpp28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp
index ee0aee2399..77c3d1e2cb 100644
--- a/src/corelib/tools/qsharedpointer.cpp
+++ b/src/corelib/tools/qsharedpointer.cpp
@@ -1226,24 +1226,22 @@ QT_BEGIN_NAMESPACE
/*!
\internal
This function is called for a just-created QObject \a obj, to enable
- the use of QSharedPointer and QWeakPointer.
+ the use of QSharedPointer and QWeakPointer in the future.
+ */
+void QtSharedPointer::ExternalRefCountData::setQObjectShared(const QObject *, bool)
+{}
- When QSharedPointer is active in a QObject, the object must not be deleted
- directly: the lifetime is managed by the QSharedPointer object. In that case,
- the deleteLater() and parent-child relationship in QObject only decrease
- the strong reference count, instead of deleting the object.
+/*!
+ \internal
+ This function is called when a QSharedPointer is created from a QWeakPointer
+
+ We check that the QWeakPointer was really created from a QSharedPointer, and
+ not from a QObject.
*/
-void QtSharedPointer::ExternalRefCountData::setQObjectShared(const QObject *obj, bool)
+void QtSharedPointer::ExternalRefCountData::checkQObjectShared(const QObject *)
{
- Q_ASSERT(obj);
- QObjectPrivate *d = QObjectPrivate::get(const_cast<QObject *>(obj));
-
- if (d->sharedRefcount.load() != 0)
- qFatal("QSharedPointer: pointer %p already has reference counting", obj);
- d->sharedRefcount.store(this);
-
- // QObject decreases the refcount too, so increase it up
- weakref.ref();
+ if (strongref.load() < 0)
+ qWarning("QSharedPointer: cannot create a QSharedPointer from a QObject-tracking QWeakPointer");
}
QtSharedPointer::ExternalRefCountData *QtSharedPointer::ExternalRefCountData::getAndRef(const QObject *obj)