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
> >
> 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, gregod at, cpdaniel at, john at