I'm trying to use enable_shared_from_this with my classes that have an
inheritance structure and a virtual function.
I'd like to get a shared pointer to the descendant class B. I've
attached 2 files. One compiles but errors at runtime, the other doesn;t
compile.
The first method uses makes both class A and B inherit from
enable_shared_from_this. The 2nd method makes only the base class A
inherit from enable_shared_from_this and tries to dynamic cast to
shared_ptr<B>.
--
sashan
http://www.cs.auckland.ac.nz/~sgov008/
#include <iostream>
#include
using namespace std;
using namespace boost;
class A :
public enable_shared_from_this<A>
{
public:
A(){ cout << "A" << endl; }
virtual void f() { shared_ptr<A> pA(shared_from_this());}
};
class B :
public A,
public enable_shared_from_this<B>
{
public:
B() { cout << "B" << endl;}
virtual void f()
{
shared_ptr<B> pB(enable_shared_from_this<B>::shared_from_this());
}
};
void main()
{
shared_ptr<A> a(new A);
a->f();
shared_ptr<B> b(new B);
b->f();
}
#include <iostream>
#include
using namespace std;
using namespace boost;
class A :
public enable_shared_from_this<A>
{
public:
A(){ cout << "A" << endl; }
virtual void f() { shared_ptr<A> pA(shared_from_this());}
};
class B :
public A
{
public:
B() { cout << "B" << endl;}
virtual void f()
{
shared_ptr<A> pA(shared_from_this());
shared_ptr<B> pB(dynamic_pointer_cast< shared_ptr<B> >(pA));
}
};
void main()
{
shared_ptr<A> a(new A);
a->f();
shared_ptr<B> b(new B);
b->f();
}