diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 871005cbbb..29ec0485df 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -5089,13 +5089,12 @@ void qDeleteInEventHandler(QObject *o) */ QMetaObject::Connection QObject::connectImpl(const QObject *sender, void **signal, const QObject *receiver, void **slot, - QtPrivate::QSlotObjectBase *slotObj, Qt::ConnectionType type, + QtPrivate::QSlotObjectBase *slotObjRaw, Qt::ConnectionType type, const int *types, const QMetaObject *senderMetaObject) { + QtPrivate::SlotObjUniquePtr slotObj(slotObjRaw); if (!signal) { qCWarning(lcConnect, "QObject::connect: invalid nullptr parameter"); - if (slotObj) - slotObj->destroyIfLastRef(); return QMetaObject::Connection(); } @@ -5108,11 +5107,10 @@ QMetaObject::Connection QObject::connectImpl(const QObject *sender, void **signa } if (!senderMetaObject) { qCWarning(lcConnect, "QObject::connect: signal not found in %s", sender->metaObject()->className()); - slotObj->destroyIfLastRef(); return QMetaObject::Connection(nullptr); } signal_index += QMetaObjectPrivate::signalOffset(senderMetaObject); - return QObjectPrivate::connectImpl(sender, signal_index, receiver, slot, slotObj, type, types, senderMetaObject); + return QObjectPrivate::connectImpl(sender, signal_index, receiver, slot, slotObj.release(), type, types, senderMetaObject); } static void connectWarning(const QObject *sender,