From 951c9fa9d9ff06dbab47b86f6d34307abb59cbf2 Mon Sep 17 00:00:00 2001
From: berenger-bramas <berenger-bramas@2616d619-271b-44dc-8df4-d4a8f33a7222>
Date: Mon, 20 Feb 2012 17:02:14 +0000
Subject: [PATCH] Remove memory leaks (two forgotten deletes).

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/scalfmm/scalfmm/trunk@412 2616d619-271b-44dc-8df4-d4a8f33a7222
---
 Src/Containers/FOctree.hpp  |  1 +
 Src/Utils/FSmartPointer.hpp | 15 +++++++++------
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/Src/Containers/FOctree.hpp b/Src/Containers/FOctree.hpp
index 738b4ed92..644411a7c 100644
--- a/Src/Containers/FOctree.hpp
+++ b/Src/Containers/FOctree.hpp
@@ -119,6 +119,7 @@ public:
     /** Desctructor */
     virtual ~FOctree() {
         delete [] boxWidthAtLevel;
+        delete root;
     }
 
     /** To get the tree height */
diff --git a/Src/Utils/FSmartPointer.hpp b/Src/Utils/FSmartPointer.hpp
index 7d92032a4..35fdb695f 100644
--- a/Src/Utils/FSmartPointer.hpp
+++ b/Src/Utils/FSmartPointer.hpp
@@ -25,7 +25,7 @@ public:
     }
 
     /** Constructor from the memory pointer */
-    FSmartPointer(ClassType* const inPointer) : pointer(0), counter(0) {
+    explicit FSmartPointer(ClassType* const inPointer) : pointer(0), counter(0) {
         assign(inPointer);
     }
 
@@ -52,9 +52,11 @@ public:
     /** Point to a new pointer, release if needed */
     void assign(ClassType* const inPointer){
         release();
-        pointer = inPointer;
-        counter = new int;
-        (*counter) = 1;
+        if( inPointer ){
+            pointer = inPointer;
+            counter = new int;
+            (*counter) = 1;
+        }
     }
 
     /** Point to a new pointer, release if needed */
@@ -62,16 +64,17 @@ public:
         release();
         pointer = inPointer.pointer;
         counter = inPointer.counter;
-        if(counter) (*counter) = (*counter) + 1;
+        if(counter) (*counter) += 1;
     }
 
     /** Dec counter and Release the memory last */
     void release(){
         if(counter){
-            (*counter) = (*counter) - 1;
+            (*counter) -= 1;
             if( (*counter) == 0 ){
                 if(MemoryType == FSmartArrayMemory) delete[] pointer;
                 else if(MemoryType == FSmartPointerMemory) delete pointer;
+                delete counter;
             }
             pointer = 0;
             counter = 0;
-- 
GitLab