From 462088b11565ac7c22d74046d58ac4805aa8fa51 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 23 Apr 2024 14:36:11 +0200 Subject: [PATCH] QSharedMemoryLocker: add missing move SMFs and member- and ADL swap This fixes clazy-rule-of-three (and -Wpeppe). The actual operations performed are copied from QMutexLocker. This code predates the public history. Pick-to: 6.7 Change-Id: Ieba73502187b32178ec2601e1902ac6b20a8e477 Reviewed-by: Giuseppe D'Angelo (cherry picked from commit a6f1779207958f25abeaa39b03d6459586bc7575) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/ipc/qsharedmemory_p.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/corelib/ipc/qsharedmemory_p.h b/src/corelib/ipc/qsharedmemory_p.h index 987bb386425..52a94e3c2ae 100644 --- a/src/corelib/ipc/qsharedmemory_p.h +++ b/src/corelib/ipc/qsharedmemory_p.h @@ -41,13 +41,22 @@ class QSharedMemoryPrivate; */ class QSharedMemoryLocker { - + Q_DISABLE_COPY(QSharedMemoryLocker) public: Q_NODISCARD_CTOR QSharedMemoryLocker(QSharedMemory *sharedMemory) : q_sm(sharedMemory) { Q_ASSERT(q_sm); } + Q_NODISCARD_CTOR QSharedMemoryLocker(QSharedMemoryLocker &&other) noexcept + : q_sm{std::exchange(other.q_sm, nullptr)} + {} + + QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QSharedMemoryLocker) + + void swap(QSharedMemoryLocker &other) noexcept + { qt_ptr_swap(q_sm, other.q_sm); } + inline ~QSharedMemoryLocker() { if (q_sm) @@ -63,6 +72,9 @@ public: } private: + friend void swap(QSharedMemoryLocker &lhs, QSharedMemoryLocker &rhs) noexcept + { lhs.swap(rhs); } + QSharedMemory *q_sm; }; #endif // QT_CONFIG(systemsemaphore)