diff --git a/src/solver/modelConverter/modelConverter.cpp b/src/solver/modelConverter/modelConverter.cpp
index c946fc1095..d44201fcdc 100644
--- a/src/solver/modelConverter/modelConverter.cpp
+++ b/src/solver/modelConverter/modelConverter.cpp
@@ -50,6 +50,7 @@ std::vector<Antares::Study::SystemModel::PortType> convertTypes(
 {
     // Convert portTypes to Antares::Study::SystemModel::PortType
     std::vector<Antares::Study::SystemModel::PortType> out;
+    out.reserve(library.port_types.size());
     for (const auto& portType: library.port_types)
     {
         std::vector<Antares::Study::SystemModel::PortField> fields;
@@ -77,6 +78,7 @@ std::vector<Antares::Study::SystemModel::Parameter> convertParameters(
 {
     namespace SM = Antares::Study::SystemModel;
     std::vector<SM::Parameter> parameters;
+    parameters.reserve(model.parameters.size());
     for (const auto& parameter: model.parameters)
     {
         parameters.emplace_back(parameter.id,
@@ -119,7 +121,7 @@ std::vector<Antares::Study::SystemModel::Variable> convertVariables(const ModelP
     namespace SM = Antares::Study::SystemModel;
 
     std::vector<SM::Variable> variables;
-
+    variables.reserve(model.variables.size());
     for (const auto& variable: model.variables)
     {
         SM::Expression lb(variable.lower_bound,
@@ -153,6 +155,7 @@ std::vector<Antares::Study::SystemModel::Constraint> convertConstraints(
   const Antares::Solver::ModelParser::Model& model)
 {
     std::vector<Antares::Study::SystemModel::Constraint> constraints;
+    constraints.reserve(model.constraints.size());
     for (const auto& constraint: model.constraints)
     {
         auto nodeRegistry = convertExpressionToNode(constraint.expression, model);
@@ -173,6 +176,7 @@ std::vector<Antares::Study::SystemModel::Model> convertModels(
   const Antares::Solver::ModelParser::Library& library)
 {
     std::vector<Antares::Study::SystemModel::Model> models;
+    models.reserve(library.models.size());
     for (const auto& model: library.models)
     {
         Antares::Study::SystemModel::ModelBuilder modelBuilder;
diff --git a/src/solver/variable/include/antares/solver/variable/adequacy/overallCost.h b/src/solver/variable/include/antares/solver/variable/adequacy/overallCost.h
index 8d73a400c8..4985aaf6ea 100644
--- a/src/solver/variable/include/antares/solver/variable/adequacy/overallCost.h
+++ b/src/solver/variable/include/antares/solver/variable/adequacy/overallCost.h
@@ -85,7 +85,7 @@ struct VCardOverallCost
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -131,11 +131,6 @@ class OverallCost: public Variable::IVariable<OverallCost<NextT>, NextT, VCardOv
     };
 
 public:
-    ~OverallCost()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -144,7 +139,7 @@ class OverallCost: public Variable::IVariable<OverallCost<NextT>, NextT, VCardOv
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/adequacy/spilledEnergy.h b/src/solver/variable/include/antares/solver/variable/adequacy/spilledEnergy.h
index 7d447e1697..d984454678 100644
--- a/src/solver/variable/include/antares/solver/variable/adequacy/spilledEnergy.h
+++ b/src/solver/variable/include/antares/solver/variable/adequacy/spilledEnergy.h
@@ -86,7 +86,7 @@ struct VCardSpilledEnergy
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -132,11 +132,6 @@ class SpilledEnergy: public Variable::IVariable<SpilledEnergy<NextT>, NextT, VCa
     };
 
 public:
-    ~SpilledEnergy()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -144,7 +139,7 @@ class SpilledEnergy: public Variable::IVariable<SpilledEnergy<NextT>, NextT, VCa
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/commons/hydro.h b/src/solver/variable/include/antares/solver/variable/commons/hydro.h
index 46f45aebf3..eeae4fd017 100644
--- a/src/solver/variable/include/antares/solver/variable/commons/hydro.h
+++ b/src/solver/variable/include/antares/solver/variable/commons/hydro.h
@@ -86,7 +86,7 @@ struct VCardTimeSeriesValuesHydro
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -134,7 +134,6 @@ class TimeSeriesValuesHydro
 public:
     ~TimeSeriesValuesHydro()
     {
-        delete[] pValuesForTheCurrentYear;
         delete[] pFatalValues;
     }
 
@@ -150,7 +149,7 @@ class TimeSeriesValuesHydro
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/commons/load.h b/src/solver/variable/include/antares/solver/variable/commons/load.h
index 46b7681e55..9bce01a29b 100644
--- a/src/solver/variable/include/antares/solver/variable/commons/load.h
+++ b/src/solver/variable/include/antares/solver/variable/commons/load.h
@@ -86,7 +86,7 @@ struct VCardTimeSeriesValuesLoad
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -132,18 +132,13 @@ class TimeSeriesValuesLoad
     };
 
 public:
-    ~TimeSeriesValuesLoad()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/commons/miscGenMinusRowPSP.h b/src/solver/variable/include/antares/solver/variable/commons/miscGenMinusRowPSP.h
index cd7f7d6ba5..08f385011d 100644
--- a/src/solver/variable/include/antares/solver/variable/commons/miscGenMinusRowPSP.h
+++ b/src/solver/variable/include/antares/solver/variable/commons/miscGenMinusRowPSP.h
@@ -84,7 +84,7 @@ struct VCardMiscGenMinusRowPSP
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
 }; // class VCard
@@ -129,11 +129,6 @@ class MiscGenMinusRowPSP
     };
 
 public:
-    ~MiscGenMinusRowPSP()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -142,7 +137,7 @@ class MiscGenMinusRowPSP
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/commons/psp.h b/src/solver/variable/include/antares/solver/variable/commons/psp.h
index 856a4ac529..da717ac6f1 100644
--- a/src/solver/variable/include/antares/solver/variable/commons/psp.h
+++ b/src/solver/variable/include/antares/solver/variable/commons/psp.h
@@ -84,7 +84,7 @@ struct VCardPSP
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
 }; // class VCard
@@ -128,11 +128,6 @@ class PSP: public Variable::IVariable<PSP<NextT>, NextT, VCardPSP>
     };
 
 public:
-    ~PSP()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -141,7 +136,7 @@ class PSP: public Variable::IVariable<PSP<NextT>, NextT, VCardPSP>
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/commons/solar.h b/src/solver/variable/include/antares/solver/variable/commons/solar.h
index ad5f6ca679..deaf4acafa 100644
--- a/src/solver/variable/include/antares/solver/variable/commons/solar.h
+++ b/src/solver/variable/include/antares/solver/variable/commons/solar.h
@@ -86,7 +86,7 @@ struct VCardTimeSeriesValuesSolar
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -132,18 +132,13 @@ class TimeSeriesValuesSolar
     };
 
 public:
-    ~TimeSeriesValuesSolar()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/commons/spatial-aggregate.h b/src/solver/variable/include/antares/solver/variable/commons/spatial-aggregate.h
index 851dbb9999..e065f1ba96 100644
--- a/src/solver/variable/include/antares/solver/variable/commons/spatial-aggregate.h
+++ b/src/solver/variable/include/antares/solver/variable/commons/spatial-aggregate.h
@@ -198,15 +198,6 @@ class SpatialAggregate
     };
 
 public:
-    SpatialAggregate()
-    {
-    }
-
-    ~SpatialAggregate()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         typedef
diff --git a/src/solver/variable/include/antares/solver/variable/commons/wind.h b/src/solver/variable/include/antares/solver/variable/commons/wind.h
index d545311fef..61907fac23 100644
--- a/src/solver/variable/include/antares/solver/variable/commons/wind.h
+++ b/src/solver/variable/include/antares/solver/variable/commons/wind.h
@@ -86,7 +86,7 @@ struct VCardTimeSeriesValuesWind
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -132,18 +132,13 @@ class TimeSeriesValuesWind
     };
 
 public:
-    ~TimeSeriesValuesWind()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/STSbyGroup.h b/src/solver/variable/include/antares/solver/variable/economy/STSbyGroup.h
index 5ea9c01af4..dbfc8a16f9 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/STSbyGroup.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/STSbyGroup.h
@@ -105,8 +105,8 @@ struct VCardSTSbyGroup
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 
 }; // class VCard
 
@@ -157,25 +157,11 @@ class STSbyGroup: public Variable::IVariable<STSbyGroup<NextT>, NextT, VCardSTSb
     };
 
 public:
-    STSbyGroup():
-        pValuesForTheCurrentYear(nullptr)
-    {
-    }
-
-    ~STSbyGroup()
-    {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromArea(Data::Study* study, Data::Area* area)
     {
         // Get the number of years in parallel
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
 
         // Building the vector of group names the clusters belong to.
         groupNames_ = sortedUniqueGroups(area->shortTermStorage.storagesByIndex);
@@ -189,8 +175,7 @@ class STSbyGroup: public Variable::IVariable<STSbyGroup<NextT>, NextT, VCardSTSb
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [nbColumns_];
+                pValuesForTheCurrentYear[numSpace].resize(nbColumns_);
             }
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
@@ -209,11 +194,6 @@ class STSbyGroup: public Variable::IVariable<STSbyGroup<NextT>, NextT, VCardSTSb
         }
         else
         {
-            for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-            {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
-            }
-
             AncestorType::pResults.clear();
         }
         // Next
diff --git a/src/solver/variable/include/antares/solver/variable/economy/STStorageCashFlowByCluster.h b/src/solver/variable/include/antares/solver/variable/economy/STStorageCashFlowByCluster.h
index 9893049943..115f091169 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/STStorageCashFlowByCluster.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/STStorageCashFlowByCluster.h
@@ -75,8 +75,8 @@ struct VCardSTstorageCashFlowByCluster
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 
 }; // class VCard
 
@@ -119,20 +119,11 @@ class STstorageCashFlowByCluster: public Variable::IVariable<STstorageCashFlowBy
 public:
     STstorageCashFlowByCluster() = default;
 
-    ~STstorageCashFlowByCluster()
-    {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromArea(Data::Study* study, Data::Area* area)
     {
         // Get the number of years in parallel
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
 
         // Get the area
         nbClusters_ = area->shortTermStorage.count();
@@ -142,8 +133,7 @@ class STstorageCashFlowByCluster: public Variable::IVariable<STstorageCashFlowBy
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [nbClusters_];
+                pValuesForTheCurrentYear[numSpace].resize(nbClusters_);
             }
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
@@ -162,11 +152,6 @@ class STstorageCashFlowByCluster: public Variable::IVariable<STstorageCashFlowBy
         }
         else
         {
-            for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-            {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
-            }
-
             AncestorType::pResults.clear();
         }
         // Next
@@ -289,7 +274,7 @@ class STstorageCashFlowByCluster: public Variable::IVariable<STstorageCashFlowBy
 
 private:
     //! Intermediate values for each year
-    typename VCardType::IntermediateValuesType pValuesForTheCurrentYear = nullptr;
+    typename VCardType::IntermediateValuesType pValuesForTheCurrentYear;
     size_t nbClusters_ = 0;
     unsigned int pNbYearsParallel = 0;
 
diff --git a/src/solver/variable/include/antares/solver/variable/economy/STStorageInjectionByCluster.h b/src/solver/variable/include/antares/solver/variable/economy/STStorageInjectionByCluster.h
index 734d73eb6e..29dd88044e 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/STStorageInjectionByCluster.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/STStorageInjectionByCluster.h
@@ -75,8 +75,8 @@ struct VCardSTstorageInjectionByCluster
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 
 }; // class VCard
 
@@ -121,25 +121,11 @@ class STstorageInjectionByCluster: public Variable::IVariable<STstorageInjection
     };
 
 public:
-    STstorageInjectionByCluster():
-        pValuesForTheCurrentYear(nullptr)
-    {
-    }
-
-    ~STstorageInjectionByCluster()
-    {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromArea(Data::Study* study, Data::Area* area)
     {
         // Get the number of years in parallel
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
 
         // Get the area
         nbClusters_ = area->shortTermStorage.count();
@@ -149,8 +135,7 @@ class STstorageInjectionByCluster: public Variable::IVariable<STstorageInjection
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [nbClusters_];
+                pValuesForTheCurrentYear[numSpace].resize(nbClusters_);
             }
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
@@ -169,11 +154,6 @@ class STstorageInjectionByCluster: public Variable::IVariable<STstorageInjection
         }
         else
         {
-            for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-            {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
-            }
-
             AncestorType::pResults.clear();
         }
         // Next
diff --git a/src/solver/variable/include/antares/solver/variable/economy/STStorageLevelsByCluster.h b/src/solver/variable/include/antares/solver/variable/economy/STStorageLevelsByCluster.h
index 55398f2252..6c46127d7a 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/STStorageLevelsByCluster.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/STStorageLevelsByCluster.h
@@ -75,8 +75,8 @@ struct VCardSTstorageLevelsByCluster
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 
 }; // class VCard
 
@@ -121,25 +121,11 @@ class STstorageLevelsByCluster: public Variable::IVariable<STstorageLevelsByClus
     };
 
 public:
-    STstorageLevelsByCluster():
-        pValuesForTheCurrentYear(nullptr)
-    {
-    }
-
-    ~STstorageLevelsByCluster()
-    {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromArea(Data::Study* study, Data::Area* area)
     {
         // Get the number of years in parallel
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
 
         // Get the area
         nbClusters_ = area->shortTermStorage.count();
@@ -149,8 +135,7 @@ class STstorageLevelsByCluster: public Variable::IVariable<STstorageLevelsByClus
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [nbClusters_];
+                pValuesForTheCurrentYear[numSpace].resize(nbClusters_);
             }
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
@@ -169,11 +154,6 @@ class STstorageLevelsByCluster: public Variable::IVariable<STstorageLevelsByClus
         }
         else
         {
-            for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-            {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
-            }
-
             AncestorType::pResults.clear();
         }
         // Next
diff --git a/src/solver/variable/include/antares/solver/variable/economy/STStorageWithdrawalByCluster.h b/src/solver/variable/include/antares/solver/variable/economy/STStorageWithdrawalByCluster.h
index e9840207b6..0b0a7d0036 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/STStorageWithdrawalByCluster.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/STStorageWithdrawalByCluster.h
@@ -75,8 +75,8 @@ struct VCardSTstorageWithdrawalByCluster
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 
 }; // class VCard
 
@@ -121,25 +121,11 @@ class STstorageWithdrawalByCluster: public Variable::IVariable<STstorageWithdraw
     };
 
 public:
-    STstorageWithdrawalByCluster():
-        pValuesForTheCurrentYear(nullptr)
-    {
-    }
-
-    ~STstorageWithdrawalByCluster()
-    {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromArea(Data::Study* study, Data::Area* area)
     {
         // Get the number of years in parallel
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
 
         // Get the area
         nbClusters_ = area->shortTermStorage.count();
@@ -149,8 +135,7 @@ class STstorageWithdrawalByCluster: public Variable::IVariable<STstorageWithdraw
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [nbClusters_];
+                pValuesForTheCurrentYear[numSpace].resize(nbClusters_);
             }
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
@@ -169,11 +154,6 @@ class STstorageWithdrawalByCluster: public Variable::IVariable<STstorageWithdraw
         }
         else
         {
-            for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-            {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
-            }
-
             AncestorType::pResults.clear();
         }
         // Next
diff --git a/src/solver/variable/include/antares/solver/variable/economy/avail-dispatchable-generation.h b/src/solver/variable/include/antares/solver/variable/economy/avail-dispatchable-generation.h
index 86b0711d16..ca0c703abc 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/avail-dispatchable-generation.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/avail-dispatchable-generation.h
@@ -86,7 +86,7 @@ struct VCardAvailableDispatchGen
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -132,11 +132,6 @@ class AvailableDispatchGen
     };
 
 public:
-    ~AvailableDispatchGen()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -145,7 +140,7 @@ class AvailableDispatchGen
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/balance.h b/src/solver/variable/include/antares/solver/variable/economy/balance.h
index 6dda7c7b5c..c903138971 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/balance.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/balance.h
@@ -86,7 +86,7 @@ struct VCardBalance
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -133,7 +133,6 @@ class Balance: public Variable::IVariable<Balance<NextT>, NextT, VCardBalance>
 public:
     ~Balance()
     {
-        delete[] pValuesForTheCurrentYear;
         delete[] bilanPays;
         delete[] pInterco;
     }
@@ -144,7 +143,7 @@ class Balance: public Variable::IVariable<Balance<NextT>, NextT, VCardBalance>
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/bindingConstraints/bindingConstraintsMarginalCost.h b/src/solver/variable/include/antares/solver/variable/economy/bindingConstraints/bindingConstraintsMarginalCost.h
index 8a1f97676f..9c8f171cb8 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/bindingConstraints/bindingConstraintsMarginalCost.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/bindingConstraints/bindingConstraintsMarginalCost.h
@@ -79,7 +79,7 @@ struct VCardBindingConstMarginCost
     static constexpr uint8_t isPossiblyNonApplicable = 1;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
 }; // class VCard
 
@@ -129,14 +129,6 @@ class BindingConstMarginCost
 public:
     BindingConstMarginCost() = default;
 
-    ~BindingConstMarginCost()
-    {
-        if (pValuesForTheCurrentYear)
-        {
-            delete[] pValuesForTheCurrentYear;
-        }
-    }
-
     void simulationBegin()
     {
         NextType::simulationBegin();
@@ -155,7 +147,7 @@ class BindingConstMarginCost
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
@@ -469,7 +461,7 @@ class BindingConstMarginCost
     // Private data mambers
     // ----------------------
     //! Intermediate values for each year
-    typename VCardType::IntermediateValuesType pValuesForTheCurrentYear = nullptr;
+    typename VCardType::IntermediateValuesType pValuesForTheCurrentYear;
     unsigned int pNbYearsParallel = 0;
     std::shared_ptr<Data::BindingConstraint> associatedBC_ = nullptr;
     uint nbCount_ = 0; // Number of inequality BCs
diff --git a/src/solver/variable/include/antares/solver/variable/economy/dispatchable-generation-margin.h b/src/solver/variable/include/antares/solver/variable/economy/dispatchable-generation-margin.h
index 76b2b5418a..26ec57ebe0 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/dispatchable-generation-margin.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/dispatchable-generation-margin.h
@@ -87,7 +87,7 @@ struct VCardDispatchableGenMargin
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -133,11 +133,6 @@ class DispatchableGenMargin
     };
 
 public:
-    ~DispatchableGenMargin()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -146,7 +141,7 @@ class DispatchableGenMargin
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/domesticUnsuppliedEnergy.h b/src/solver/variable/include/antares/solver/variable/economy/domesticUnsuppliedEnergy.h
index ab73f1a2b2..b27495ac65 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/domesticUnsuppliedEnergy.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/domesticUnsuppliedEnergy.h
@@ -87,7 +87,7 @@ struct VCardDomesticUnsuppliedEnergy
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -135,11 +135,6 @@ class DomesticUnsuppliedEnergy: public Variable::IVariable<DomesticUnsuppliedEne
     };
 
 public:
-    ~DomesticUnsuppliedEnergy()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -147,7 +142,7 @@ class DomesticUnsuppliedEnergy: public Variable::IVariable<DomesticUnsuppliedEne
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/dtgMarginAfterCsr.h b/src/solver/variable/include/antares/solver/variable/economy/dtgMarginAfterCsr.h
index d748b9ac4c..dbd81a044c 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/dtgMarginAfterCsr.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/dtgMarginAfterCsr.h
@@ -80,7 +80,7 @@ struct VCardDtgMarginCsr
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -125,11 +125,6 @@ class DtgMarginCsr: public Variable::IVariable<DtgMarginCsr<NextT>, NextT, VCard
         };
     };
 
-    ~DtgMarginCsr()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -137,7 +132,7 @@ class DtgMarginCsr: public Variable::IVariable<DtgMarginCsr<NextT>, NextT, VCard
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/hydroCost.h b/src/solver/variable/include/antares/solver/variable/economy/hydroCost.h
index 1edf42e14f..66b313600b 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/hydroCost.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/hydroCost.h
@@ -88,7 +88,7 @@ struct VCardHydroCost
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -133,18 +133,13 @@ class HydroCost: public Variable::IVariable<HydroCost<NextT>, NextT, VCardHydroC
     };
 
 public:
-    ~HydroCost()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/hydrostorage.h b/src/solver/variable/include/antares/solver/variable/economy/hydrostorage.h
index be56b970b6..aa92462fa8 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/hydrostorage.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/hydrostorage.h
@@ -86,7 +86,7 @@ struct VCardHydroStorage
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -132,18 +132,13 @@ class HydroStorage: public Variable::IVariable<HydroStorage<NextT>, NextT, VCard
     };
 
 public:
-    ~HydroStorage()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/inflow.h b/src/solver/variable/include/antares/solver/variable/economy/inflow.h
index 136bd8410e..cb843c0fe9 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/inflow.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/inflow.h
@@ -86,7 +86,7 @@ struct VCardInflows
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -131,18 +131,13 @@ class Inflows: public Variable::IVariable<Inflows<NextT>, NextT, VCardInflows>
     };
 
 public:
-    ~Inflows()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/links/congestionFee.h b/src/solver/variable/include/antares/solver/variable/economy/links/congestionFee.h
index 6e2c2200d0..81a0c960d0 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/links/congestionFee.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/links/congestionFee.h
@@ -83,7 +83,7 @@ struct VCardCongestionFee
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
 }; // class VCard
 
@@ -126,11 +126,6 @@ class CongestionFee: public Variable::IVariable<CongestionFee<NextT>, NextT, VCa
     };
 
 public:
-    ~CongestionFee()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -140,7 +135,7 @@ class CongestionFee: public Variable::IVariable<CongestionFee<NextT>, NextT, VCa
         AncestorType::pResults.reset();
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/links/congestionFeeAbs.h b/src/solver/variable/include/antares/solver/variable/economy/links/congestionFeeAbs.h
index d6468f5e88..91312298e1 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/links/congestionFeeAbs.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/links/congestionFeeAbs.h
@@ -85,7 +85,7 @@ struct VCardCongestionFeeAbs
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
 }; // class VCard
 
@@ -129,11 +129,6 @@ class CongestionFeeAbs
     };
 
 public:
-    ~CongestionFeeAbs()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -143,7 +138,7 @@ class CongestionFeeAbs
         AncestorType::pResults.reset();
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/links/flowLinear.h b/src/solver/variable/include/antares/solver/variable/economy/links/flowLinear.h
index 5d89ae75cd..47269cf3c0 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/links/flowLinear.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/links/flowLinear.h
@@ -83,7 +83,7 @@ struct VCardFlowLinear
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
 }; // class VCard
 
@@ -126,11 +126,6 @@ class FlowLinear: public Variable::IVariable<FlowLinear<NextT>, NextT, VCardFlow
     };
 
 public:
-    ~FlowLinear()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -140,7 +135,7 @@ class FlowLinear: public Variable::IVariable<FlowLinear<NextT>, NextT, VCardFlow
         AncestorType::pResults.reset();
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/links/flowLinearAbs.h b/src/solver/variable/include/antares/solver/variable/economy/links/flowLinearAbs.h
index c7ca4ba60e..664b51b459 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/links/flowLinearAbs.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/links/flowLinearAbs.h
@@ -85,7 +85,7 @@ struct VCardFlowLinearAbs
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
 }; // class VCard
 
@@ -128,11 +128,6 @@ class FlowLinearAbs: public Variable::IVariable<FlowLinearAbs<NextT>, NextT, VCa
     };
 
 public:
-    ~FlowLinearAbs()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -142,7 +137,7 @@ class FlowLinearAbs: public Variable::IVariable<FlowLinearAbs<NextT>, NextT, VCa
         AncestorType::pResults.reset();
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/links/hurdleCosts.h b/src/solver/variable/include/antares/solver/variable/economy/links/hurdleCosts.h
index a4b1c0c4de..c70791c1b9 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/links/hurdleCosts.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/links/hurdleCosts.h
@@ -83,7 +83,7 @@ struct VCardHurdleCosts
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
 }; // class VCard
 
@@ -126,11 +126,6 @@ class HurdleCosts: public Variable::IVariable<HurdleCosts<NextT>, NextT, VCardHu
     };
 
 public:
-    ~HurdleCosts()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -140,7 +135,7 @@ class HurdleCosts: public Variable::IVariable<HurdleCosts<NextT>, NextT, VCardHu
         AncestorType::pResults.reset();
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/links/marginalCost.h b/src/solver/variable/include/antares/solver/variable/economy/links/marginalCost.h
index 0b267870a3..6e4192e73d 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/links/marginalCost.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/links/marginalCost.h
@@ -85,7 +85,7 @@ struct VCardMarginalCost
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
 }; // class VCard
 
@@ -128,11 +128,6 @@ class MarginalCost: public Variable::IVariable<MarginalCost<NextT>, NextT, VCard
     };
 
 public:
-    ~MarginalCost()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -142,7 +137,7 @@ class MarginalCost: public Variable::IVariable<MarginalCost<NextT>, NextT, VCard
         AncestorType::pResults.reset();
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/localMatchingRuleViolations.h b/src/solver/variable/include/antares/solver/variable/economy/localMatchingRuleViolations.h
index 868588f271..896a97dc26 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/localMatchingRuleViolations.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/localMatchingRuleViolations.h
@@ -77,7 +77,7 @@ struct VCardLMRViolations
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -122,11 +122,6 @@ class LMRViolations: public Variable::IVariable<LMRViolations<NextT>, NextT, VCa
         };
     };
 
-    ~LMRViolations()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -134,7 +129,7 @@ class LMRViolations: public Variable::IVariable<LMRViolations<NextT>, NextT, VCa
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/lold.h b/src/solver/variable/include/antares/solver/variable/economy/lold.h
index 875408a060..394cf0adab 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/lold.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/lold.h
@@ -87,7 +87,7 @@ struct VCardLOLD
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -132,11 +132,6 @@ class LOLD: public Variable::IVariable<LOLD<NextT>, NextT, VCardLOLD>
     };
 
 public:
-    ~LOLD()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -144,7 +139,7 @@ class LOLD: public Variable::IVariable<LOLD<NextT>, NextT, VCardLOLD>
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/loldCsr.h b/src/solver/variable/include/antares/solver/variable/economy/loldCsr.h
index 299e83b94f..c752a90a21 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/loldCsr.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/loldCsr.h
@@ -82,7 +82,7 @@ struct VCardLOLD_CSR
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -127,11 +127,6 @@ class LOLD_CSR: public Variable::IVariable<LOLD_CSR<NextT>, NextT, VCardLOLD_CSR
     };
 
 public:
-    ~LOLD_CSR()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -139,7 +134,7 @@ class LOLD_CSR: public Variable::IVariable<LOLD_CSR<NextT>, NextT, VCardLOLD_CSR
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/lolp.h b/src/solver/variable/include/antares/solver/variable/economy/lolp.h
index 95602b0030..9a2c80c352 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/lolp.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/lolp.h
@@ -83,7 +83,7 @@ struct VCardLOLP
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -128,11 +128,6 @@ class LOLP: public Variable::IVariable<LOLP<NextT>, NextT, VCardLOLP>
     };
 
 public:
-    ~LOLP()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -140,7 +135,7 @@ class LOLP: public Variable::IVariable<LOLP<NextT>, NextT, VCardLOLP>
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/lolpCsr.h b/src/solver/variable/include/antares/solver/variable/economy/lolpCsr.h
index 45d9ed61ac..cabf88b6ad 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/lolpCsr.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/lolpCsr.h
@@ -81,7 +81,7 @@ struct VCardLOLP_CSR
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -126,11 +126,6 @@ class LOLP_CSR: public Variable::IVariable<LOLP_CSR<NextT>, NextT, VCardLOLP_CSR
     };
 
 public:
-    ~LOLP_CSR()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -138,7 +133,7 @@ class LOLP_CSR: public Variable::IVariable<LOLP_CSR<NextT>, NextT, VCardLOLP_CSR
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/max-mrg-csr.h b/src/solver/variable/include/antares/solver/variable/economy/max-mrg-csr.h
index 2ff8edc89d..fe2d001c87 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/max-mrg-csr.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/max-mrg-csr.h
@@ -85,7 +85,7 @@ struct VCardMAX_MRG_CSR
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -136,11 +136,6 @@ class MaxMrgCsr: public Variable::IVariable<MaxMrgCsr<NextT>, NextT, VCardMAX_MR
     };
 
 public:
-    ~MaxMrgCsr()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -148,7 +143,7 @@ class MaxMrgCsr: public Variable::IVariable<MaxMrgCsr<NextT>, NextT, VCardMAX_MR
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/max-mrg.h b/src/solver/variable/include/antares/solver/variable/economy/max-mrg.h
index a53b893947..8cf83bc740 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/max-mrg.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/max-mrg.h
@@ -88,7 +88,7 @@ struct VCardMARGE
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -133,11 +133,6 @@ class Marge: public Variable::IVariable<Marge<NextT>, NextT, VCardMARGE>
     };
 
 public:
-    ~Marge()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -145,7 +140,7 @@ class Marge: public Variable::IVariable<Marge<NextT>, NextT, VCardMARGE>
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/nbOfDispatchedUnits.h b/src/solver/variable/include/antares/solver/variable/economy/nbOfDispatchedUnits.h
index 173343f61f..01904bf7e8 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/nbOfDispatchedUnits.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/nbOfDispatchedUnits.h
@@ -90,7 +90,7 @@ struct VCardNbOfDispatchedUnits
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -137,18 +137,13 @@ class NbOfDispatchedUnits
     };
 
 public:
-    ~NbOfDispatchedUnits()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/nbOfDispatchedUnitsByPlant.h b/src/solver/variable/include/antares/solver/variable/economy/nbOfDispatchedUnitsByPlant.h
index ed570bca43..6a54c40945 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/nbOfDispatchedUnitsByPlant.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/nbOfDispatchedUnitsByPlant.h
@@ -82,10 +82,8 @@ struct VCardNbOfDispatchedUnitsByPlant
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
-
-    // typedef IntermediateValues IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 
 }; // class VCard
 
@@ -132,20 +130,10 @@ class NbOfDispatchedUnitsByPlant: public Variable::IVariable<NbOfDispatchedUnits
 
 public:
     NbOfDispatchedUnitsByPlant():
-        pValuesForTheCurrentYear(NULL),
         pSize(0)
     {
     }
 
-    ~NbOfDispatchedUnitsByPlant()
-    {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         // Next
@@ -155,7 +143,7 @@ class NbOfDispatchedUnitsByPlant: public Variable::IVariable<NbOfDispatchedUnits
     void initializeFromArea(Data::Study* study, Data::Area* area)
     {
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
 
         // Get the area
         pSize = area->thermal.list.enabledCount();
@@ -164,8 +152,7 @@ class NbOfDispatchedUnitsByPlant: public Variable::IVariable<NbOfDispatchedUnits
             AncestorType::pResults.resize(pSize);
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [pSize];
+                pValuesForTheCurrentYear[numSpace].resize(pSize);
             }
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
@@ -184,11 +171,6 @@ class NbOfDispatchedUnitsByPlant: public Variable::IVariable<NbOfDispatchedUnits
         }
         else
         {
-            for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-            {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
-            }
-
             AncestorType::pResults.clear();
         }
 
@@ -320,7 +302,7 @@ class NbOfDispatchedUnitsByPlant: public Variable::IVariable<NbOfDispatchedUnits
       unsigned int,
       unsigned int numSpace) const
     {
-        return pValuesForTheCurrentYear[numSpace]->hour;
+        return pValuesForTheCurrentYear[numSpace][0].hour;
     }
 
     void localBuildAnnualSurveyReport(SurveyResults& results,
diff --git a/src/solver/variable/include/antares/solver/variable/economy/nonProportionalCost.h b/src/solver/variable/include/antares/solver/variable/economy/nonProportionalCost.h
index 8d26594739..e308ce15b8 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/nonProportionalCost.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/nonProportionalCost.h
@@ -90,7 +90,7 @@ struct VCardNonProportionalCost
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -137,18 +137,13 @@ class NonProportionalCost
     };
 
 public:
-    ~NonProportionalCost()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/npCostByDispatchablePlant.h b/src/solver/variable/include/antares/solver/variable/economy/npCostByDispatchablePlant.h
index 2a9b806664..128f7b9a55 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/npCostByDispatchablePlant.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/npCostByDispatchablePlant.h
@@ -82,10 +82,10 @@ struct VCardNonProportionalCostByDispatchablePlant
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 
-    // typedef IntermediateValues IntermediateValuesType;
+    // typedef std::vector<IntermediateValues> IntermediateValuesType;
 
 }; // class VCard
 
@@ -134,20 +134,10 @@ class NonProportionalCostByDispatchablePlant
 
 public:
     NonProportionalCostByDispatchablePlant():
-        pValuesForTheCurrentYear(NULL),
         pSize(0)
     {
     }
 
-    ~NonProportionalCostByDispatchablePlant()
-    {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         // Next
@@ -158,7 +148,7 @@ class NonProportionalCostByDispatchablePlant
     {
         // Get the number of years in parallel
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
 
         // Get the area
         pSize = area->thermal.list.enabledCount();
@@ -167,8 +157,7 @@ class NonProportionalCostByDispatchablePlant
             AncestorType::pResults.resize(pSize);
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [pSize];
+                pValuesForTheCurrentYear[numSpace].resize(pSize);
             }
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
@@ -187,11 +176,6 @@ class NonProportionalCostByDispatchablePlant
         }
         else
         {
-            for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-            {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
-            }
-
             AncestorType::pResults.clear();
         }
 
@@ -301,7 +285,7 @@ class NonProportionalCostByDispatchablePlant
       unsigned int,
       unsigned int numSpace) const
     {
-        return pValuesForTheCurrentYear[numSpace]->hour;
+        return pValuesForTheCurrentYear[numSpace][0].hour;
     }
 
     void localBuildAnnualSurveyReport(SurveyResults& results,
diff --git a/src/solver/variable/include/antares/solver/variable/economy/operatingCost.h b/src/solver/variable/include/antares/solver/variable/economy/operatingCost.h
index df95f6d65c..a39e506345 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/operatingCost.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/operatingCost.h
@@ -89,7 +89,7 @@ struct VCardOperatingCost
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -135,18 +135,13 @@ class OperatingCost: public Variable::IVariable<OperatingCost<NextT>, NextT, VCa
     };
 
 public:
-    ~OperatingCost()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/overallCost.h b/src/solver/variable/include/antares/solver/variable/economy/overallCost.h
index ccb6632e9e..bbc10986ee 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/overallCost.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/overallCost.h
@@ -85,7 +85,7 @@ struct VCardOverallCost
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -131,11 +131,6 @@ class OverallCost: public Variable::IVariable<OverallCost<NextT>, NextT, VCardOv
     };
 
 public:
-    ~OverallCost()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -144,7 +139,7 @@ class OverallCost: public Variable::IVariable<OverallCost<NextT>, NextT, VCardOv
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/overallCostCsr.h b/src/solver/variable/include/antares/solver/variable/economy/overallCostCsr.h
index 63739b686b..1735f81ba7 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/overallCostCsr.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/overallCostCsr.h
@@ -83,7 +83,7 @@ struct VCardOverallCostCsr
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -129,11 +129,6 @@ class OverallCostCsr: public Variable::IVariable<OverallCostCsr<NextT>, NextT, V
     };
 
 public:
-    ~OverallCostCsr()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -142,7 +137,7 @@ class OverallCostCsr: public Variable::IVariable<OverallCostCsr<NextT>, NextT, V
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/overflow.h b/src/solver/variable/include/antares/solver/variable/economy/overflow.h
index 05a7cb5fbe..079c17a1f0 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/overflow.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/overflow.h
@@ -86,7 +86,7 @@ struct VCardOverflow
     static constexpr uint8_t isPossiblyNonApplicable = 1;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -131,18 +131,13 @@ class Overflows: public Variable::IVariable<Overflows<NextT>, NextT, VCardOverfl
     };
 
 public:
-    ~Overflows()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/price.h b/src/solver/variable/include/antares/solver/variable/economy/price.h
index f74567c938..7ac93069bf 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/price.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/price.h
@@ -87,7 +87,7 @@ struct VCardPrice
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -132,11 +132,6 @@ class Price: public Variable::IVariable<Price<NextT>, NextT, VCardPrice>
     };
 
 public:
-    ~Price()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -145,7 +140,7 @@ class Price: public Variable::IVariable<Price<NextT>, NextT, VCardPrice>
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/priceCSR.h b/src/solver/variable/include/antares/solver/variable/economy/priceCSR.h
index 617d3ed772..d5209b6171 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/priceCSR.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/priceCSR.h
@@ -88,7 +88,7 @@ struct VCardPriceCSR
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -133,11 +133,6 @@ class PriceCSR: public Variable::IVariable<PriceCSR<NextT>, NextT, VCardPriceCSR
     };
 
 public:
-    ~PriceCSR()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -146,7 +141,7 @@ class PriceCSR: public Variable::IVariable<PriceCSR<NextT>, NextT, VCardPriceCSR
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
         // Intermediate values
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/productionByDispatchablePlant.h b/src/solver/variable/include/antares/solver/variable/economy/productionByDispatchablePlant.h
index b2b604a6fc..df35b21957 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/productionByDispatchablePlant.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/productionByDispatchablePlant.h
@@ -82,8 +82,8 @@ struct VCardProductionByDispatchablePlant
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 
 }; // class VCard
 
@@ -130,7 +130,6 @@ class ProductionByDispatchablePlant
 
 public:
     ProductionByDispatchablePlant():
-        pValuesForTheCurrentYear(nullptr),
         pminOfTheClusterForYear(nullptr),
         pSize(0)
     {
@@ -138,12 +137,6 @@ class ProductionByDispatchablePlant
 
     ~ProductionByDispatchablePlant()
     {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             delete[] pminOfTheClusterForYear[numSpace];
@@ -161,7 +154,7 @@ class ProductionByDispatchablePlant
     {
         // Get the number of years in parallel
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         pminOfTheClusterForYear = new double*[pNbYearsParallel];
 
         // Get the area
@@ -172,8 +165,7 @@ class ProductionByDispatchablePlant
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [pSize];
+                pValuesForTheCurrentYear[numSpace].resize(pSize);
             }
 
             // Minimum power values of the cluster for the whole year - from the solver in the
@@ -203,7 +195,6 @@ class ProductionByDispatchablePlant
         {
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
                 pminOfTheClusterForYear[numSpace] = nullptr;
             }
 
diff --git a/src/solver/variable/include/antares/solver/variable/economy/productionByRenewablePlant.h b/src/solver/variable/include/antares/solver/variable/economy/productionByRenewablePlant.h
index 1267c51b67..405f30b8a3 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/productionByRenewablePlant.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/productionByRenewablePlant.h
@@ -82,8 +82,8 @@ struct VCardProductionByRenewablePlant
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 
 }; // class VCard
 
@@ -129,20 +129,10 @@ class ProductionByRenewablePlant: public Variable::IVariable<ProductionByRenewab
 
 public:
     ProductionByRenewablePlant():
-        pValuesForTheCurrentYear(nullptr),
         pSize(0)
     {
     }
 
-    ~ProductionByRenewablePlant()
-    {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         // Next
@@ -153,7 +143,7 @@ class ProductionByRenewablePlant: public Variable::IVariable<ProductionByRenewab
     {
         // Get the number of years in parallel
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
 
         // Get the area
         pSize = area->renewable.list.enabledCount();
@@ -163,8 +153,7 @@ class ProductionByRenewablePlant: public Variable::IVariable<ProductionByRenewab
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [pSize];
+                pValuesForTheCurrentYear[numSpace].resize(pSize);
             }
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
@@ -183,11 +172,6 @@ class ProductionByRenewablePlant: public Variable::IVariable<ProductionByRenewab
         }
         else
         {
-            for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-            {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
-            }
-
             AncestorType::pResults.clear();
         }
         // Next
diff --git a/src/solver/variable/include/antares/solver/variable/economy/profitByPlant.h b/src/solver/variable/include/antares/solver/variable/economy/profitByPlant.h
index 22b8f2d527..c504ad3e36 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/profitByPlant.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/profitByPlant.h
@@ -82,8 +82,8 @@ struct VCardProfitByPlant
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesDeepType;
-    typedef IntermediateValues* IntermediateValuesBaseType;
-    typedef IntermediateValuesBaseType* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesBaseType;
+    typedef std::vector<IntermediateValuesBaseType> IntermediateValuesType;
 }; // class VCard
 
 /*!
@@ -127,20 +127,10 @@ class ProfitByPlant: public Variable::IVariable<ProfitByPlant<NextT>, NextT, VCa
 
 public:
     ProfitByPlant():
-        pValuesForTheCurrentYear(nullptr),
         pNbClustersOfArea(0)
     {
     }
 
-    ~ProfitByPlant()
-    {
-        for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-        {
-            delete[] pValuesForTheCurrentYear[numSpace];
-        }
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         // Next
@@ -151,7 +141,7 @@ class ProfitByPlant: public Variable::IVariable<ProfitByPlant<NextT>, NextT, VCa
     {
         // Get the number of years in parallel
         pNbYearsParallel = study->maxNbYearsInParallel;
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
 
         // Get the area
         pNbClustersOfArea = area->thermal.list.enabledCount();
@@ -160,8 +150,7 @@ class ProfitByPlant: public Variable::IVariable<ProfitByPlant<NextT>, NextT, VCa
             AncestorType::pResults.resize(pNbClustersOfArea);
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
             {
-                pValuesForTheCurrentYear[numSpace] = new VCardType::IntermediateValuesDeepType
-                  [pNbClustersOfArea];
+                pValuesForTheCurrentYear[numSpace].resize(pNbClustersOfArea);
             }
 
             for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
@@ -180,11 +169,6 @@ class ProfitByPlant: public Variable::IVariable<ProfitByPlant<NextT>, NextT, VCa
         }
         else
         {
-            for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
-            {
-                pValuesForTheCurrentYear[numSpace] = nullptr;
-            }
-
             AncestorType::pResults.clear();
         }
 
@@ -299,7 +283,7 @@ class ProfitByPlant: public Variable::IVariable<ProfitByPlant<NextT>, NextT, VCa
       unsigned int,
       unsigned int numSpace) const
     {
-        return pValuesForTheCurrentYear[numSpace]->hour;
+        return pValuesForTheCurrentYear[numSpace][0].hour;
     }
 
     void localBuildAnnualSurveyReport(SurveyResults& results,
diff --git a/src/solver/variable/include/antares/solver/variable/economy/pumping.h b/src/solver/variable/include/antares/solver/variable/economy/pumping.h
index db8d59289f..56ddcb6212 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/pumping.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/pumping.h
@@ -86,7 +86,7 @@ struct VCardPumping
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -131,18 +131,13 @@ class Pumping: public Variable::IVariable<Pumping<NextT>, NextT, VCardPumping>
     };
 
 public:
-    ~Pumping()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/reservoirlevel.h b/src/solver/variable/include/antares/solver/variable/economy/reservoirlevel.h
index 9dad55e963..69befe1cc2 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/reservoirlevel.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/reservoirlevel.h
@@ -86,7 +86,7 @@ struct VCardReservoirLevel
     static constexpr uint8_t isPossiblyNonApplicable = 1;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -131,18 +131,13 @@ class ReservoirLevel: public Variable::IVariable<ReservoirLevel<NextT>, NextT, V
     };
 
 public:
-    ~ReservoirLevel()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/spilledEnergy.h b/src/solver/variable/include/antares/solver/variable/economy/spilledEnergy.h
index ad6c895d3f..707f8eeb18 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/spilledEnergy.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/spilledEnergy.h
@@ -86,7 +86,7 @@ struct VCardSpilledEnergy
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -132,11 +132,6 @@ class SpilledEnergy: public Variable::IVariable<SpilledEnergy<NextT>, NextT, VCa
     };
 
 public:
-    ~SpilledEnergy()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -144,7 +139,7 @@ class SpilledEnergy: public Variable::IVariable<SpilledEnergy<NextT>, NextT, VCa
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/unsupliedEnergy.h b/src/solver/variable/include/antares/solver/variable/economy/unsupliedEnergy.h
index b3f15946ae..cb2eef6ad1 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/unsupliedEnergy.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/unsupliedEnergy.h
@@ -86,7 +86,7 @@ struct VCardUnsupliedEnergy
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -133,11 +133,6 @@ class UnsupliedEnergy
     };
 
 public:
-    ~UnsupliedEnergy()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -145,7 +140,7 @@ class UnsupliedEnergy
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/unsupliedEnergyCsr.h b/src/solver/variable/include/antares/solver/variable/economy/unsupliedEnergyCsr.h
index a83ccb2e03..94e65e3820 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/unsupliedEnergyCsr.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/unsupliedEnergyCsr.h
@@ -83,7 +83,7 @@ struct VCardUnsupliedEnergyCSR
     static constexpr uint8_t isPossiblyNonApplicable = 0;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -126,11 +126,6 @@ class UnsupliedEnergyCSR
     };
 
 public:
-    ~UnsupliedEnergyCSR()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
@@ -138,7 +133,7 @@ class UnsupliedEnergyCSR
         // Intermediate values
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/economy/waterValue.h b/src/solver/variable/include/antares/solver/variable/economy/waterValue.h
index 488737ca5c..6ae43c0419 100644
--- a/src/solver/variable/include/antares/solver/variable/economy/waterValue.h
+++ b/src/solver/variable/include/antares/solver/variable/economy/waterValue.h
@@ -86,7 +86,7 @@ struct VCardWaterValue
     static constexpr uint8_t isPossiblyNonApplicable = 1;
 
     typedef IntermediateValues IntermediateValuesBaseType;
-    typedef IntermediateValues* IntermediateValuesType;
+    typedef std::vector<IntermediateValues> IntermediateValuesType;
 
     typedef IntermediateValuesBaseType* IntermediateValuesTypeForSpatialAg;
 
@@ -131,18 +131,13 @@ class WaterValue: public Variable::IVariable<WaterValue<NextT>, NextT, VCardWate
     };
 
 public:
-    ~WaterValue()
-    {
-        delete[] pValuesForTheCurrentYear;
-    }
-
     void initializeFromStudy(Data::Study& study)
     {
         pNbYearsParallel = study.maxNbYearsInParallel;
 
         InitializeResultsFromStudy(AncestorType::pResults, study);
 
-        pValuesForTheCurrentYear = new VCardType::IntermediateValuesBaseType[pNbYearsParallel];
+        pValuesForTheCurrentYear.resize(pNbYearsParallel);
         for (unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
         {
             pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
diff --git a/src/solver/variable/include/antares/solver/variable/storage/intermediate.h b/src/solver/variable/include/antares/solver/variable/storage/intermediate.h
index 661baf7eaa..dc95a5c39a 100644
--- a/src/solver/variable/include/antares/solver/variable/storage/intermediate.h
+++ b/src/solver/variable/include/antares/solver/variable/storage/intermediate.h
@@ -119,7 +119,6 @@ class IntermediateValues final
     const Type& operator[](const uint index) const;
     //@}
 
-public:
     //! Range
     Antares::Data::StudyRangeLimits* pRange;
     //! Calendar, from the study, but dedicated to the output (with leap year)
@@ -138,17 +137,6 @@ class IntermediateValues final
     //! Year
     Type year;
 
-private:
-    // non copyable
-    IntermediateValues(const IntermediateValues&)
-    {
-    }
-
-    IntermediateValues& operator=(const IntermediateValues&)
-    {
-        return *this;
-    }
-
     template<uint Size, class VCardT, class A>
     void internalExportAnnualValues(SurveyResults& report, const A& array, bool annual) const;