Boost logo

Boost Users :

Subject: Re: [Boost-users] [SmartPtr] enable_shared_from_raw / weak_from_raw remains not associated
From: Frank Mori Hess (fmh6jj_at_[hidden])
Date: 2013-05-16 14:09:58


On Thu, May 16, 2013 at 5:58 AM, Slava
<Viatcheslav.Sysoltsev_at_[hidden]> wrote:
> I'm converting existing code with parent-child object tree to boost
> shared_ptr/weak_ptr with parents having [now shared] ownership over the
> children and children having weak reference to the parent. In the existing
> code a parent usually becomes the children as constructor parameters, and
> thus I have to extract the weak_ptr to "this" in constructor, which does not
> work with current boost::enable_shared_from_this implementation. So I am
> looking to enable_shared_from_raw alternative, which is promising, but
> unfortunately does not quite work for my case. Here is a small example
> demonstrating the issue:

> struct Parent : public boost::enable_shared_from_raw
> {
> Parent(boost::shared_ptr<Child> _child)
> {
> std::cout << "Construct Parent" << std::endl;
> this->child = _child;
> this->child->parent = boost::weak_from_raw(this);
> }

weak_from_raw() doesn't work until after a shared_ptr has taken
ownership of the object or shared_from_raw() has been called. It's
been long enough don't remember what the rationale for this was, or if
there even was a rationale, but the enable_shared_from_raw test case
seems to expect this behavior. From looking at the code, it seems
like if you just called shared_from_raw prior to calling weak_from_raw
it would work.


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