diff --git a/Src/Containers/FOctree.hpp b/Src/Containers/FOctree.hpp index 738b4ed92da71ed7db8257035aed5576ee4ce64f..644411a7cfac3500642cec0fb88d0a276bd4c5da 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 7d92032a41990461b9b9dadea914bcbd6b47b461..35fdb695f5df96edcf017f264218c87178cca06e 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;