diff options
-rw-r--r-- | src/corelib/tools/qsharedpointer_impl.h | 4 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp | 7 |
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 |