
On Thu, May 16, 2013 at 5:58 AM, Slava
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.