Boost logo

Boost Users :

From: Yaoltzin Gomez (yaoltzin_at_[hidden])
Date: 2007-05-26 13:07:56


Thank you for you time to answer. Allthough your answer has helped me, I
still have the bad_weak_ptr exception. Every time I try to access the
shared_from_this pointer from inside Base member functions, I get that
exception. What I want to know is how can I access safely an without errors,
the shared_from_this pointer inside my Base class, when I create a smart
pointer instance of my Derived class.

In derived I don't have that problem (I can access shared_from_this)
because this is the class the instance is created.

Thanks in advance

Peter Dimov wrote:

> Yaoltzin Gomez wrote:
>
> > Basically, what I have is this:
> >
> > class Base : public boost::enable_shared_from_this<Base>
> > {
> > boost::shared_ptr<Base> GetBasePointer()
> > {
> > return shared_from_this();
> > }
> >
> > void Foo()
> > {
> > shared_ptr<Child> child( new Child );
> > AddChild( child, GetBasePointer() );
> > }
> > };
> >
> > class Derived: public Base, public
> > boost::enable_shared_from_this<Derived> {
> > boost::shared_ptr<Derived> GetDerivedPointer()
> > {
> > return shared_from_this();
> > }
>
> [...]
>
> One way to avoid putting more than one enable_shared_from_this<> base into
> Derived is to use
>
> class Derived: public Base
> {
> boost::shared_ptr<Derived> GetDerivedPointer()
> {
> return dynamic_pointer_cast<Derived>( shared_from_this() );
> }
>
> // ...
> };
>
> static_pointer_cast will also work in this case (it will fail if Derived
> uses virtual inheritance).
>



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