# HG changeset patch # User Balazs Dezso # Date 2009-02-23 23:44:29 # Node ID ba124394367a55cc36b851a808f3f3218abf8367 # Parent 0fec6a017eaddac797518d40c102144176c47fad Automatic GLPK env deallocation (#213) diff --git a/lemon/glpk.cc b/lemon/glpk.cc --- a/lemon/glpk.cc +++ b/lemon/glpk.cc @@ -526,6 +526,8 @@ glp_free_env(); } + GlpkBase::FreeEnvHelper GlpkBase::freeEnvHelper; + // GlpkLp members GlpkLp::GlpkLp() diff --git a/lemon/glpk.h b/lemon/glpk.h --- a/lemon/glpk.h +++ b/lemon/glpk.h @@ -100,16 +100,20 @@ virtual void _clear(); + private: + + static void freeEnv(); + + struct FreeEnvHelper { + ~FreeEnvHelper() { + freeEnv(); + } + }; + + static FreeEnvHelper freeEnvHelper; + public: - /// \brief Deallocates the globally allocated memory of GLPK. - - /// Deallocates the globally allocated memory of GLPK. \note - /// Usually, it do not have to be called, because the GLPK use - /// only a small amount of global memory, and it is deallocated - /// automatically at the end of program. - static void freeEnv(); - ///Pointer to the underlying GLPK data structure. LPX *lpx() {return lp;} ///Const pointer to the underlying GLPK data structure. diff --git a/test/lp_test.cc b/test/lp_test.cc --- a/test/lp_test.cc +++ b/test/lp_test.cc @@ -366,7 +366,6 @@ lpTest(lp_glpk1); aTest(lp_glpk2); } - GlpkLp::freeEnv(); #endif #ifdef HAVE_CPLEX diff --git a/test/mip_test.cc b/test/mip_test.cc --- a/test/mip_test.cc +++ b/test/mip_test.cc @@ -115,7 +115,6 @@ GlpkMip mip1; aTest(mip1); } - GlpkLp::freeEnv(); #endif #ifdef HAVE_CPLEX