diff --git a/include/hpp/centroidal-dynamics/centroidal_dynamics.hh b/include/hpp/centroidal-dynamics/centroidal_dynamics.hh
index dec780509a7d5636b35b4afdbef7ca7d0521b105..46729c11bed2db0ef7a91ccfc7fdf41838e0067a 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 11b1f49303c3c7d0e02aff01ce25c5bd2f03fa7f..85226c419fea364e66109fe2b051f263b7df12ab 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 67284f1e87888ce1c0a61286d58c565c5392f58f..d292c41edc482c525284e369278a1ad81facfdba 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 3c5428b5d8e1137d9b486b2dad2d3f21c2d683b4..9f08107aab04b70884ed0b6a63cc26ef3e19b0c0 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();