Fix memory leaks, fix tests.
[command.git] / include / command.h
index ec0868180b94a2c7f29121a6e7b264b82f6c7c53..8ecb280e78aff6bb4080c40fd2ae086f65b44f12 100644 (file)
@@ -3,7 +3,6 @@
 
 #include <string>
 #include <vector>
-#include <iostream>
 
 #include "parameter.h"
 
@@ -26,16 +25,20 @@ namespace command {
         Command(unsigned int argc, char *argv[], std::initializer_list<Parameter *> params)
             : parameters(params) {
 
-            matchArguments(argc, argv);
+            try {
+                matchArguments(argc, argv);
+            }
+            catch(std::invalid_argument exception) {
+                releaseMemory();
+                throw;
+            }
         }
 
         /**
          * Destructor. Releases allocated memory.
          */
         ~Command() {
-            for (Parameter * parameter : parameters) {
-                delete parameter;
-            }
+            releaseMemory();
         }
     protected:
         /**
@@ -51,6 +54,19 @@ namespace command {
                 }
             }
         }
+
+        /**
+         * Releases acquired memory
+         */
+        void releaseMemory() {
+            for (Parameter * parameter : parameters) {
+                if (parameter != NULL) {
+                    delete parameter;
+                }
+            }
+            parameters.clear();
+            parameters.shrink_to_fit();
+        }
     };
 }