diff options
author | jlquinn <jlquinn@optonline.net> | 2022-01-30 01:37:17 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-30 01:37:17 +0300 |
commit | 1b8cbd6f611c21011325cfe0312940f0635dea33 (patch) | |
tree | 40841cbeac5b9e81fabafa4abeab80df33d7d52a | |
parent | a56f8225c2ebade4a742b1e691514c7d6c9def3d (diff) |
Fix memory leak in AlignedVector. (#96)
Co-authored-by: Jerry Quinn <jlquinn@us.ibm.com>
-rw-r--r-- | intgemm/aligned.h | 18 |
1 files 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 T> 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 T> 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 T> class AlignedVector { private: T *mem_; std::size_t size_; + + void release() { +#ifdef _MSC_VER + _aligned_free(mem_); +#else + std::free(mem_); +#endif + } }; } // namespace intgemm |