Boost logo

Boost :

Subject: Re: [boost] Weak functor: Interested? (How to boost::bind to a weak_ptr)
From: Roman Perepelitsa (roman.perepelitsa_at_[hidden])
Date: 2012-01-11 08:03:04


2012/1/11 Stewart, Robert <Robert.Stewart_at_[hidden]>

> Roman Perepelitsa wrote:
> >
> > It can be done. In fact, it has already been done. See
> > http://lists.boost.org/boost-users/2011/09/70647.php.
>
> PMFJI, but that code looks suspect. get_pointer() locks the weak_ptr to
> get a raw pointer from the related shared_ptr, but then the shared_ptr
> returned by lock() is allowed to go out of scope. Thus, the ptr_adapter
> returned by get_pointer() holds a transiently valid raw pointer. By the
> time the pointer is used to call the member function, the last shared_ptr
> owning the associated memory could release the memory, so the ptr_adapter
> will have a dangling pointer.
>

Yes, it's a bug.

If ptr_adapter were to hold a shared_ptr instead of a raw pointer, then the
> memory could not be released out from under the ptr_adapter. That, of
> course, doesn't work with get_pointer().
>

Of course it works with get_pointer.

Roman Perepelitsa.


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