]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/commitdiff
Get rid of DynMem memory leaks
authorMichal Sojka <michal.sojka@cvut.cz>
Mon, 1 Oct 2018 23:01:17 +0000 (01:01 +0200)
committerMichal Sojka <michal.sojka@cvut.cz>
Mon, 1 Oct 2018 23:02:23 +0000 (01:02 +0200)
src/dynmem.hpp

index c830a5e8099f78dd724bbae106127398730f29db..236794d6a7b458acf6005ea5508204d3c90a2245 100644 (file)
@@ -47,11 +47,7 @@ template <typename T> 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 <typename T> 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 <typename T> 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_<float> DynMem;