On Fri, Feb 20, 2009 at 3:00 PM, Bruce Laing
This program seems to be leaking boost::exception::error_info objects. Is there something missing here?
- Bruce
typedef boost::error_info< struct tag_my_error, std::string > some_error_info;
struct an_exception : public boost::exception, public std::exception {};
void throw_func() { BOOST_THROW_EXCEPTION ( an_exception() // no leak if next line is commented out. << some_error_info( std::string( "error message" ) ) ); } . . . BOOST_AUTO_TEST_CASE( test_exceptions ) { try { throw_func() } catch( an_exception& ) { } }
What platform? Do you have a complete program that shows the problem? This test seems to work as expected: #include "boost/exception.hpp" class counter { int & c_; counter & operator=( counter const & ); public: explicit counter( int & c ): c_(c) { ++c_; } counter( counter const & x ): c_(x.c_) { ++c_; } ~counter() { --c_; } }; typedef boost::error_info< struct tag_my_error, counter > some_error_info; struct an_exception : public boost::exception, public std::exception {}; int c; void throw_func() { BOOST_THROW_EXCEPTION ( an_exception() << some_error_info( counter(c) ) ); } int main() { c=0; try { throw_func(); } catch( an_exception & ) { assert(c>0); } assert(!c); } Emil Dotchevski Reverge Studios, Inc. http://www.revergestudios.com/reblog/index.php?n=ReCode