From 1b8cbd6f611c21011325cfe0312940f0635dea33 Mon Sep 17 00:00:00 2001 From: jlquinn Date: Sat, 29 Jan 2022 17:37:17 -0500 Subject: Fix memory leak in AlignedVector. (#96) Co-authored-by: Jerry Quinn --- intgemm/aligned.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/intgemm/aligned.h b/intgemm/aligned.h index cba7d06..6b55ff2 100644 --- a/intgemm/aligned.h +++ b/intgemm/aligned.h @@ -47,6 +47,8 @@ template class AlignedVector { } AlignedVector &operator=(AlignedVector &&from) { + if (this == &from) return *this; + release(); mem_ = from.mem_; size_ = from.size_; from.mem_ = nullptr; @@ -57,13 +59,7 @@ template class AlignedVector { AlignedVector(const AlignedVector&) = delete; AlignedVector& operator=(const AlignedVector&) = delete; - ~AlignedVector() { -#ifdef _MSC_VER - _aligned_free(mem_); -#else - std::free(mem_); -#endif - } + ~AlignedVector() { release(); } std::size_t size() const { return size_; } @@ -81,6 +77,14 @@ template class AlignedVector { private: T *mem_; std::size_t size_; + + void release() { +#ifdef _MSC_VER + _aligned_free(mem_); +#else + std::free(mem_); +#endif + } }; } // namespace intgemm -- cgit v1.2.3