Boost logo

Boost Users :

From: dariomt_at_[hidden]
Date: 2007-10-01 10:33:02


I need to create a class hierarchy where every level inherits from
boost::enable_shared_from_this. I am having problems caused, I believe, by
having more than one copy of enable_shared_from_this.

I am using boost 1.34.1 with VS2003 and VS2005, with and without ICL9.1,
always getting the same result: a boost::bad_weak_ptr exception.

#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>

using namespace boost;

struct A : enable_shared_from_this<A>
{
    shared_ptr<A> getA() {return
enable_shared_from_this<A>::shared_from_this();}
};
struct B : A, enable_shared_from_this<B>
{
    shared_ptr<B> getB() {return
enable_shared_from_this<B>::shared_from_this();}
};

int main()
{
    shared_ptr<A> pA (new A);
    pA->getA(); // this works OK

    shared_ptr<B> pB (new B);
    pB->getB(); // throws boost::bad_weak_ptr() !?

    return 0;
}

question 1: Is this expected or am I doing something wrong?
question 2: If it is expected: is it possible to have it explained in the
documentation?
question 3: Is there a way to accomplish this (inheritance with
shared_from_this in all levels) using enable_shared_from_this?

Thanks in advance



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