summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/tools/qsharedpointer_impl.h4
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp7
2 files changed, 9 insertions, 2 deletions
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h
index f5a94fe00b..2cb07ad2fe 100644
--- a/src/corelib/tools/qsharedpointer_impl.h
+++ b/src/corelib/tools/qsharedpointer_impl.h
@@ -387,10 +387,10 @@ public:
// now initialize the data
new (result.data()) T();
- result.d->setQObjectShared(result.value, true);
# ifdef QT_SHAREDPOINTER_TRACK_POINTERS
internalSafetyCheckAdd(result.d, result.value);
# endif
+ result.d->setQObjectShared(result.value, true);
return result;
}
@@ -425,10 +425,10 @@ private:
# endif
d = Private::create(ptr, deleter, actualDeleter);
- d->setQObjectShared(ptr, true);
#ifdef QT_SHAREDPOINTER_TRACK_POINTERS
internalSafetyCheckAdd(d, ptr);
#endif
+ d->setQObjectShared(ptr, true);
}
template <class X>
diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
index 6896b328d0..f38df1e42f 100644
--- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
@@ -1760,6 +1760,13 @@ void tst_QSharedPointer::invalidConstructs_data()
"QSharedPointer<Data> ptr1 = QSharedPointer<Data>(aData);\n"
"QSharedPointer<Data> ptr2 = QSharedPointer<Data>(aData);\n";
+ // two QObjects with the same pointer
+ QTest::newRow("same-pointer-to-qobject")
+ << &QTest::QExternalTest::tryRunFail
+ << "QObject *anObj = new QObject;\n"
+ "QSharedPointer<QObject> ptr1 = QSharedPointer<QObject>(anObj);\n"
+ "QSharedPointer<QObject> ptr2 = QSharedPointer<QObject>(anObj);\n";
+
// re-creation:
QTest::newRow("re-creation")
<< &QTest::QExternalTest::tryRunFail