From e021a4c8743545ffbf32589807363c0b5bec23a2 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Tue, 2 Oct 2018 01:01:17 +0200 Subject: [PATCH] Get rid of DynMem memory leaks --- src/dynmem.hpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/dynmem.hpp b/src/dynmem.hpp index c830a5e..236794d 100644 --- a/src/dynmem.hpp +++ b/src/dynmem.hpp @@ -47,11 +47,7 @@ template class DynMem_ { } ~DynMem_() { -#ifdef CUFFT - CudaSafeCall(cudaFreeHost(ptr_h)); -#else - delete[] ptr_h; -#endif + release(); } T *hostMem() { return ptr_h; } const T *hostMem() const { return ptr_h; } @@ -65,6 +61,7 @@ template class DynMem_ { void operator=(DynMem_ &&rhs) { assert(num_elem == rhs.num_elem); + release(); ptr_h = rhs.ptr_h; rhs.ptr_h = nullptr; #ifdef CUFFT @@ -73,6 +70,15 @@ template class DynMem_ { #endif } T operator[](uint i) const { return ptr_h[i]; } +private: + void release() + { +#ifdef CUFFT + CudaSafeCall(cudaFreeHost(ptr_h)); +#else + delete[] ptr_h; +#endif + } }; typedef DynMem_ DynMem; -- 2.39.2