From 308d0b5f9607e687d27b0d3b4c60149a9b505d17 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 13 Jun 2023 09:34:12 +0200 Subject: [PATCH] Q(Explicitly)SharedDataPointer: mark ctors [[nodiscard]] They're RAII classes, and RAII class' constructors should be marked [[nodiscard]]. Task-number: QTBUG-104164 Change-Id: If4265a431839a5d3c16dcc855b1ded2d2fc7408c Reviewed-by: Thiago Macieira (cherry picked from commit c823bc2fdba412e867373ef60be8c48feb3c1a48) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/tools/qshareddata.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h index 826152b63af..4c4153a506c 100644 --- a/src/corelib/tools/qshareddata.h +++ b/src/corelib/tools/qshareddata.h @@ -51,13 +51,17 @@ public: const T *constData() const noexcept { return d; } T *take() noexcept { return std::exchange(d, nullptr); } + Q_NODISCARD_CTOR QSharedDataPointer() noexcept : d(nullptr) { } ~QSharedDataPointer() { if (d && !d->ref.deref()) delete d; } + Q_NODISCARD_CTOR explicit QSharedDataPointer(T *data) noexcept : d(data) { if (d) d->ref.ref(); } + Q_NODISCARD_CTOR QSharedDataPointer(T *data, QAdoptSharedDataTag) noexcept : d(data) {} + Q_NODISCARD_CTOR QSharedDataPointer(const QSharedDataPointer &o) noexcept : d(o.d) { if (d) d->ref.ref(); } @@ -82,6 +86,7 @@ public: reset(o); return *this; } + Q_NODISCARD_CTOR QSharedDataPointer(QSharedDataPointer &&o) noexcept : d(std::exchange(o.d, nullptr)) {} QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QSharedDataPointer) @@ -139,17 +144,22 @@ public: void detach() { if (d && d->ref.loadRelaxed() != 1) detach_helper(); } + Q_NODISCARD_CTOR QExplicitlySharedDataPointer() noexcept : d(nullptr) { } ~QExplicitlySharedDataPointer() { if (d && !d->ref.deref()) delete d; } + Q_NODISCARD_CTOR explicit QExplicitlySharedDataPointer(T *data) noexcept : d(data) { if (d) d->ref.ref(); } + Q_NODISCARD_CTOR QExplicitlySharedDataPointer(T *data, QAdoptSharedDataTag) noexcept : d(data) {} + Q_NODISCARD_CTOR QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer &o) noexcept : d(o.d) { if (d) d->ref.ref(); } template + Q_NODISCARD_CTOR QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer &o) noexcept #ifdef QT_ENABLE_QEXPLICITLYSHAREDDATAPOINTER_STATICCAST : d(static_cast(o.data())) @@ -179,6 +189,7 @@ public: reset(o); return *this; } + Q_NODISCARD_CTOR QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o) noexcept : d(std::exchange(o.d, nullptr)) {} QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QExplicitlySharedDataPointer)