# HG changeset patch # User Balazs Dezso # Date 1235429069 -3600 # Node ID ba124394367a55cc36b851a808f3f3218abf8367 # Parent 0fec6a017eaddac797518d40c102144176c47fad Automatic GLPK env deallocation (#213) diff -r 0fec6a017ead -r ba124394367a lemon/glpk.cc --- a/lemon/glpk.cc Mon Feb 23 22:54:25 2009 +0100 +++ b/lemon/glpk.cc Mon Feb 23 23:44:29 2009 +0100 @@ -526,6 +526,8 @@ glp_free_env(); } + GlpkBase::FreeEnvHelper GlpkBase::freeEnvHelper; + // GlpkLp members GlpkLp::GlpkLp() diff -r 0fec6a017ead -r ba124394367a lemon/glpk.h --- a/lemon/glpk.h Mon Feb 23 22:54:25 2009 +0100 +++ b/lemon/glpk.h Mon Feb 23 23:44:29 2009 +0100 @@ -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 -r 0fec6a017ead -r ba124394367a test/lp_test.cc --- a/test/lp_test.cc Mon Feb 23 22:54:25 2009 +0100 +++ b/test/lp_test.cc Mon Feb 23 23:44:29 2009 +0100 @@ -366,7 +366,6 @@ lpTest(lp_glpk1); aTest(lp_glpk2); } - GlpkLp::freeEnv(); #endif #ifdef HAVE_CPLEX diff -r 0fec6a017ead -r ba124394367a test/mip_test.cc --- a/test/mip_test.cc Mon Feb 23 22:54:25 2009 +0100 +++ b/test/mip_test.cc Mon Feb 23 23:44:29 2009 +0100 @@ -115,7 +115,6 @@ GlpkMip mip1; aTest(mip1); } - GlpkLp::freeEnv(); #endif #ifdef HAVE_CPLEX