From 5cd16659ff0c7421d5375fcb6114d96f875ff6d0 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sat, 28 Dec 2024 12:38:33 +0100 Subject: [PATCH] Port QtCore from QScoped- to std::unique_ptr [1/2]: private uses This patch series is in preparation of enabling QT_NO_SCOPED_POINTER when building QtCore, a prerequisite for enabling this opt-out in leaf modules. This first part of the patch series ports objects whose use cannot "leak" into other modules, e.g. because they are in .cpp files or are private members and is thus SC (and, as demonstrated by various static assertions we put into the source code over the years, BC). The second patch will deal with objects in protected and public APIs, and thus might be QUIP-6 SiC Type A. Task-number: QTBUG-132213 Change-Id: If4967f6e563a4e7d74550fad4c6d354fad1beef5 Reviewed-by: Ahmad Samir (cherry picked from commit 63f1c6fcbab5f36809ffc96ac5ff6cb9e01e70bb) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/io/qdiriterator.h | 4 +++- src/corelib/io/qfsfileengine_iterator_p.h | 4 +++- src/corelib/io/qiodevice.h | 4 +++- src/corelib/io/qsettings.h | 2 +- src/corelib/ipc/qsystemsemaphore.h | 4 +++- src/corelib/kernel/qcoreapplication.cpp | 2 +- src/corelib/kernel/qcoreapplication.h | 2 +- src/corelib/kernel/qjnienvironment.h | 2 +- src/corelib/platform/android/qandroidextras.cpp | 6 +++--- src/corelib/platform/android/qandroidextras_p.h | 6 ++++-- src/corelib/serialization/qcborstreamreader.h | 4 +++- src/corelib/serialization/qcborstreamwriter.h | 4 +++- src/corelib/serialization/qcborvalue.cpp | 2 +- src/corelib/serialization/qdatastream.h | 3 ++- src/corelib/serialization/qxmlstream.h | 6 ++++-- 15 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/corelib/io/qdiriterator.h b/src/corelib/io/qdiriterator.h index 7fa612ebe0f..6c9b40b28c4 100644 --- a/src/corelib/io/qdiriterator.h +++ b/src/corelib/io/qdiriterator.h @@ -6,6 +6,8 @@ #include +#include + QT_BEGIN_NAMESPACE class QDirIteratorPrivate; @@ -44,7 +46,7 @@ public: private: Q_DISABLE_COPY(QDirIterator) - QScopedPointer d; + std::unique_ptr d; friend class QDir; }; diff --git a/src/corelib/io/qfsfileengine_iterator_p.h b/src/corelib/io/qfsfileengine_iterator_p.h index 22400abb7db..f3ffc336844 100644 --- a/src/corelib/io/qfsfileengine_iterator_p.h +++ b/src/corelib/io/qfsfileengine_iterator_p.h @@ -19,6 +19,8 @@ #include "qfilesystemiterator_p.h" #include "qdir.h" +#include + #ifndef QT_NO_FILESYSTEMITERATOR QT_BEGIN_NAMESPACE @@ -37,7 +39,7 @@ public: QFileInfo currentFileInfo() const override; private: - mutable QScopedPointer nativeIterator; + mutable std::unique_ptr nativeIterator; }; QT_END_NAMESPACE diff --git a/src/corelib/io/qiodevice.h b/src/corelib/io/qiodevice.h index 76bc61e7325..6bf7149e9af 100644 --- a/src/corelib/io/qiodevice.h +++ b/src/corelib/io/qiodevice.h @@ -19,6 +19,8 @@ #error qiodevice.h must be included before any header file that defines open #endif +#include + QT_BEGIN_NAMESPACE @@ -137,7 +139,7 @@ protected: void setErrorString(const QString &errorString); #ifdef QT_NO_QOBJECT - QScopedPointer d_ptr; + std::unique_ptr d_ptr; #endif private: diff --git a/src/corelib/io/qsettings.h b/src/corelib/io/qsettings.h index 8bc73eb016c..5d0356e8906 100644 --- a/src/corelib/io/qsettings.h +++ b/src/corelib/io/qsettings.h @@ -31,7 +31,7 @@ class Q_CORE_EXPORT QSettings #ifndef QT_NO_QOBJECT Q_OBJECT #else - QScopedPointer d_ptr; + std::unique_ptr d_ptr; #endif Q_DECLARE_PRIVATE(QSettings) diff --git a/src/corelib/ipc/qsystemsemaphore.h b/src/corelib/ipc/qsystemsemaphore.h index df6fd28342c..0981a7eecee 100644 --- a/src/corelib/ipc/qsystemsemaphore.h +++ b/src/corelib/ipc/qsystemsemaphore.h @@ -9,6 +9,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE #if QT_CONFIG(systemsemaphore) @@ -65,7 +67,7 @@ public: private: Q_DISABLE_COPY(QSystemSemaphore) - QScopedPointer d; + std::unique_ptr d; }; #endif // QT_CONFIG(systemsemaphore) diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 2094e12dc32..4d093ec71cd 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -1914,7 +1914,7 @@ void QCoreApplicationPrivate::sendPostedEvents(QObject *receiver, int event_type locker.unlock(); const auto relocker = qScopeGuard([&locker] { locker.lock(); }); - QScopedPointer event_deleter(e); // will delete the event (with the mutex unlocked) + const std::unique_ptr event_deleter(e); // will delete the event (with the mutex unlocked) // after all that work, it's time to deliver the event. QCoreApplication::sendEvent(r, e); diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h index 421578117cd..e37cae7ddf5 100644 --- a/src/corelib/kernel/qcoreapplication.h +++ b/src/corelib/kernel/qcoreapplication.h @@ -218,7 +218,7 @@ protected: QCoreApplication(QCoreApplicationPrivate &p); #ifdef QT_NO_QOBJECT - QScopedPointer d_ptr; + std::unique_ptr d_ptr; #endif private: diff --git a/src/corelib/kernel/qjnienvironment.h b/src/corelib/kernel/qjnienvironment.h index dda8dc0950c..b473f75bed1 100644 --- a/src/corelib/kernel/qjnienvironment.h +++ b/src/corelib/kernel/qjnienvironment.h @@ -92,7 +92,7 @@ public: private: Q_DISABLE_COPY_MOVE(QJniEnvironment) - QScopedPointer d; + std::unique_ptr d; }; QT_END_NAMESPACE diff --git a/src/corelib/platform/android/qandroidextras.cpp b/src/corelib/platform/android/qandroidextras.cpp index 72805ae9ed2..8cf2e463991 100644 --- a/src/corelib/platform/android/qandroidextras.cpp +++ b/src/corelib/platform/android/qandroidextras.cpp @@ -489,7 +489,7 @@ public: static QAndroidActivityResultReceiverPrivate *get(QAndroidActivityResultReceiver *publicObject) { - return publicObject->d.data(); + return publicObject->d.get(); } }; @@ -513,7 +513,7 @@ QAndroidActivityResultReceiver::QAndroidActivityResultReceiver() : d(new QAndroidActivityResultReceiverPrivate) { d->q = this; - QtAndroidPrivate::registerActivityResultListener(d.data()); + QtAndroidPrivate::registerActivityResultListener(d.get()); } /*! @@ -521,7 +521,7 @@ QAndroidActivityResultReceiver::QAndroidActivityResultReceiver() */ QAndroidActivityResultReceiver::~QAndroidActivityResultReceiver() { - QtAndroidPrivate::unregisterActivityResultListener(d.data()); + QtAndroidPrivate::unregisterActivityResultListener(d.get()); } /*! diff --git a/src/corelib/platform/android/qandroidextras_p.h b/src/corelib/platform/android/qandroidextras_p.h index efdc6cf74f1..1ebd156cb38 100644 --- a/src/corelib/platform/android/qandroidextras_p.h +++ b/src/corelib/platform/android/qandroidextras_p.h @@ -28,6 +28,8 @@ #include #endif +#include + QT_BEGIN_NAMESPACE class QAndroidParcel; @@ -103,7 +105,7 @@ private: friend class QAndroidActivityResultReceiverPrivate; Q_DISABLE_COPY(QAndroidActivityResultReceiver) - QScopedPointer d; + std::unique_ptr d; }; class Q_CORE_EXPORT QAndroidServiceConnection @@ -170,7 +172,7 @@ private: friend class QAndroidServicePrivate; Q_DISABLE_COPY(QAndroidService) - QScopedPointer d; + std::unique_ptr d; }; class QAndroidActivityCallbackResultReceiver: public QAndroidActivityResultReceiver diff --git a/src/corelib/serialization/qcborstreamreader.h b/src/corelib/serialization/qcborstreamreader.h index 2666b7c7b2b..5c03f95f0c2 100644 --- a/src/corelib/serialization/qcborstreamreader.h +++ b/src/corelib/serialization/qcborstreamreader.h @@ -11,6 +11,8 @@ #include #include +#include + QT_REQUIRE_CONFIG(cborstreamreader); /* X11 headers use these values too, but as defines */ @@ -194,7 +196,7 @@ private: friend QCborStreamReaderPrivate; friend class QCborContainerPrivate; quint64 value64; - QScopedPointer d; + std::unique_ptr d; quint8 type_; quint8 reserved[3] = {}; }; diff --git a/src/corelib/serialization/qcborstreamwriter.h b/src/corelib/serialization/qcborstreamwriter.h index 1018646c992..630cf67b7a4 100644 --- a/src/corelib/serialization/qcborstreamwriter.h +++ b/src/corelib/serialization/qcborstreamwriter.h @@ -13,6 +13,8 @@ #include #endif +#include + QT_REQUIRE_CONFIG(cborstreamwriter); /* X11 headers use these values too, but as defines */ @@ -81,7 +83,7 @@ public: // no API for encoding chunked strings private: - QScopedPointer d; + std::unique_ptr d; }; QT_END_NAMESPACE diff --git a/src/corelib/serialization/qcborvalue.cpp b/src/corelib/serialization/qcborvalue.cpp index b4cb432e78a..8a931a39dd0 100644 --- a/src/corelib/serialization/qcborvalue.cpp +++ b/src/corelib/serialization/qcborvalue.cpp @@ -1785,7 +1785,7 @@ static QCborValue taggedValueFromCbor(QCborStreamReader &reader, int remainingRe extern void qt_cbor_stream_set_error(QCborStreamReaderPrivate *d, QCborError error); inline void QCborContainerPrivate::setErrorInReader(QCborStreamReader &reader, QCborError error) { - qt_cbor_stream_set_error(reader.d.data(), error); + qt_cbor_stream_set_error(reader.d.get(), error); } extern QCborStreamReader::StringResultCode qt_cbor_append_string_chunk(QCborStreamReader &reader, QByteArray *data); diff --git a/src/corelib/serialization/qdatastream.h b/src/corelib/serialization/qdatastream.h index 71f2f4bbd9b..264454e9b6a 100644 --- a/src/corelib/serialization/qdatastream.h +++ b/src/corelib/serialization/qdatastream.h @@ -11,6 +11,7 @@ #include #include // std::distance(), std::next() +#include #ifdef Status #error qdatastream.h must be included before any header file that defines Status @@ -216,7 +217,7 @@ public: private: Q_DISABLE_COPY(QDataStream) - QScopedPointer d; + std::unique_ptr d; QIODevice *dev = nullptr; bool owndev = false; diff --git a/src/corelib/serialization/qxmlstream.h b/src/corelib/serialization/qxmlstream.h index 4f7ecd8cd94..71294cb6bc9 100644 --- a/src/corelib/serialization/qxmlstream.h +++ b/src/corelib/serialization/qxmlstream.h @@ -13,6 +13,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE namespace QtPrivate { @@ -361,7 +363,7 @@ private: Q_DISABLE_COPY(QXmlStreamReader) Q_DECLARE_PRIVATE(QXmlStreamReader) - QScopedPointer d_ptr; + std::unique_ptr d_ptr; }; #endif // feature xmlstreamreader @@ -461,7 +463,7 @@ public: private: Q_DISABLE_COPY(QXmlStreamWriter) Q_DECLARE_PRIVATE(QXmlStreamWriter) - QScopedPointer d_ptr; + std::unique_ptr d_ptr; }; #endif // feature xmlstreamwriter