From 1cdd40bfc3a001acb209e6c48464d93287eccb8d Mon Sep 17 00:00:00 2001
From: Jason Chemin <jchemin@machinesan>
Date: Fri, 12 Jun 2020 17:06:59 +0200
Subject: [PATCH] [Fix] add destructor to avoid memory leak.

---
 include/hpp/centroidal-dynamics/centroidal_dynamics.hh | 2 ++
 include/hpp/centroidal-dynamics/solver_LP_abstract.hh  | 2 ++
 include/hpp/centroidal-dynamics/solver_LP_qpoases.hh   | 2 ++
 src/centroidal_dynamics.cpp                            | 4 ++++
 4 files changed, 10 insertions(+)

diff --git a/include/hpp/centroidal-dynamics/centroidal_dynamics.hh b/include/hpp/centroidal-dynamics/centroidal_dynamics.hh
index dec7805..46729c1 100644
--- a/include/hpp/centroidal-dynamics/centroidal_dynamics.hh
+++ b/include/hpp/centroidal-dynamics/centroidal_dynamics.hh
@@ -97,6 +97,8 @@ class CENTROIDAL_DYNAMICS_DLLAPI Equilibrium {
 
   Equilibrium(const Equilibrium& other);
 
+  ~Equilibrium();
+
   /**
    * @brief Returns the useWarmStart flag.
    * @return True if the LP solver is allowed to use warm start, false otherwise.
diff --git a/include/hpp/centroidal-dynamics/solver_LP_abstract.hh b/include/hpp/centroidal-dynamics/solver_LP_abstract.hh
index 11b1f49..85226c4 100644
--- a/include/hpp/centroidal-dynamics/solver_LP_abstract.hh
+++ b/include/hpp/centroidal-dynamics/solver_LP_abstract.hh
@@ -51,6 +51,8 @@ class CENTROIDAL_DYNAMICS_DLLAPI Solver_LP_abstract {
     m_useWarmStart = true;
   }
 
+  virtual ~Solver_LP_abstract() {}
+
   /**
    * @brief Create a new LP solver of the specified type.
    * @param solverType Type of LP solver.
diff --git a/include/hpp/centroidal-dynamics/solver_LP_qpoases.hh b/include/hpp/centroidal-dynamics/solver_LP_qpoases.hh
index 67284f1..d292c41 100644
--- a/include/hpp/centroidal-dynamics/solver_LP_qpoases.hh
+++ b/include/hpp/centroidal-dynamics/solver_LP_qpoases.hh
@@ -25,6 +25,8 @@ class CENTROIDAL_DYNAMICS_DLLAPI Solver_LP_qpoases : public Solver_LP_abstract {
  public:
   Solver_LP_qpoases();
 
+  virtual ~Solver_LP_qpoases() {}
+
   /** Solve the linear program
    *  minimize    c' x
    *  subject to  Alb <= A x <= Aub
diff --git a/src/centroidal_dynamics.cpp b/src/centroidal_dynamics.cpp
index 3c5428b..9f08107 100644
--- a/src/centroidal_dynamics.cpp
+++ b/src/centroidal_dynamics.cpp
@@ -72,6 +72,10 @@ Equilibrium::Equilibrium(const string& name, const double mass, const unsigned i
   m_D.block<3, 3>(3, 0) = crossMatrix(-m_mass * m_gravity);
 }
 
+Equilibrium::~Equilibrium(){
+  delete m_solver;
+}
+
 bool Equilibrium::computeGenerators(Cref_matrixX3 contactPoints, Cref_matrixX3 contactNormals,
                                     double frictionCoefficient, const bool perturbate) {
   long int c = contactPoints.rows();
-- 
GitLab