Boost logo

Boost Users :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2007-06-11 09:11:15


Hughes, James wrote:

> RemoveIf(Fred.begin(),
> Fred.end(),
> boost::bind(&map<string, shared_ptr<data>
> >::value_type::second::unique, _1)
> )
>
> Still get same compile fault however.

It would be nice if this could work with a single bind, but unfortunately
you need two:

boost::bind( &shared_ptr<data>::unique,
    boost::bind( &map<string, shared_ptr<data> >::value_type::second, _1 )
)

There is an additional pitfall here; depending on the version of boost::bind
and the compiler, the inner bind may return a shared_ptr by value, making
the use_count at least 2. You should probably just fall back to the
old-fashioned

bool second_unique( map<string, shared_ptr<data> >::value_type & v )
{
    return v.second.unique();
}

(I'm using a non-const reference as a parameter to guard against potential
silent implicit conversions which could also increase the use_count.)

Removing the unique entries sounds like purging a cache, maybe weak_ptr will
work better in your map?


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net