Boost logo

Boost :

Subject: Re: [boost] possible bug introduced in boost function
From: Emil Dotchevski (emil_at_[hidden])
Date: 2008-09-05 22:06:38


On Fri, Sep 5, 2008 at 6:22 PM, Emil Dotchevski <emil_at_[hidden]> wrote:
> I have strong suspicions that the changes in boost::function made
> today introduce a serious bug in the lifetime management of the
> contained object. I don't have a simple test case to demonstrate it,
> but a rather complicated use of boost::function which contains
> shared_ptr in a boost::bind results in incorrect refcount which leads
> to a crash.
>
> Reverting to revision 48607 makes the shared_ptr refcount correct.

Here's a simple test case, I tried it with msvc 9:

#include "boost/function.hpp"

int instances=0;
struct X
{
        X() { ++instances; }
        X(X const &) { ++instances; }
        ~X() { --instances; }
        void operator()() { }
};
boost::function<void()> f() { return X(); }

int main( int argc, char const * argv[] )
{
        boost::function<void()> f2;
        f2=f();
        assert(instances==1);
}

Emil Dotchevski
Reverge Studios, Inc.
http://www.revergestudios.com/reblog/index.php?n=ReCode


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk