From a18013c8f4863a2c282a12582bfb74c9216e2d5e Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Wed, 11 May 2022 09:28:09 -0700 Subject: [PATCH] fix a memory leak in Invocable --- libs/utils/include/utils/Invocable.h | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/libs/utils/include/utils/Invocable.h b/libs/utils/include/utils/Invocable.h index d2f69c3655..49b4307181 100644 --- a/libs/utils/include/utils/Invocable.h +++ b/libs/utils/include/utils/Invocable.h @@ -62,7 +62,7 @@ public: // Creates an Invocable from the functor passed in. template = 0> - Invocable(Fn&& fn) noexcept; + Invocable(Fn&& fn) noexcept; // NOLINT(google-explicit-constructor) Invocable(const Invocable&) = delete; Invocable(Invocable&& rhs) noexcept; @@ -121,12 +121,9 @@ Invocable::Invocable(Invocable&& rhs) noexcept template Invocable& Invocable::operator=(Invocable&& rhs) noexcept { if (this != &rhs) { - mInvocable = rhs.mInvocable; - mDeleter = rhs.mDeleter; - mInvoker = rhs.mInvoker; - rhs.mInvocable = nullptr; - rhs.mDeleter = nullptr; - rhs.mInvoker = nullptr; + std::swap(mInvocable, rhs.mInvocable); + std::swap(mDeleter, rhs.mDeleter); + std::swap(mInvoker, rhs.mInvoker); } return *this; }