Boost logo

Boost :

Subject: Re: [boost] atomic_count::operator++ return type
From: Peter Dimov (pdimov_at_[hidden])
Date: 2009-04-11 18:58:54


JOAQUIN M. LOPEZ MUÑOZ:
...
> > https://svn.boost.org/trac/boost/browser/trunk/boost/flyweight/refcounted.hpp

> * TrackingHelper::entry(h) returns the value to which the
> refcounted_handle h refers (which is implicitly convertible to a
> refcounted_value). Think of it as a dereference operator.

> * TrackingHelper::erase(h,check_erase) deletes the value refered to by h
> iff check_erase(h) returns true. The execution of this routine happens in
> a locked context (including the call to check_erase and erasure itself).

> * Though it may not be apparent, the execution of explicit
> refcounted_handle(const Handle&) also happens in a locked context (this is
> important to the implementation of the refcounting protocol).

Thanks. I think I see it now.

Although... I may be missing something, but why doesn't the simple

explicit refcounted_handle(const Handle& h_):h(h_)
{
    TrackingHelper::entry(*this).add_ref();
}

static bool check_erase(const refcounted_handle& x)
{
    return TrackingHelper::entry(x).count() == 0;
}

work?


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