Hello everyone

Here's my problem. I have a small set of classes (I'm working on an API). Some of the classes use inheritance hierarchy. Sometimes I need to use (well lots of times) the "this" pointer and work with raw pointers inside each class. However, I would like to work with smart pointers. So I need to change the signature of my member functions to accept smart pointers, but now I need an "this" smart pointer equivalent. I derived the classes from boost::enable_shared_from_this.

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();
    }

    void Bar()
    {
       AnotherFunction( GetDerivedPointer() );
       ...
    }
};

Now, in the main function I have:

int main(...)
{
    boost::shared_ptr<Derived> derived( new Derived );

    derived->Foo();
    derived->Bar();
}

Obviously, this causes a bad_weak_ptr exception, because I'm creating a Derived instance, and the shared_from_this called inside Foo throws the exception, but I need to call this functions defined in the Base class.

In other words, I need access to the shared_from_this, in Base and Derived, and right now I can't do this. I would like to know if it's possible to use shared_from_this in this way, or not, and if not, what other options do I have (besides using raw pointers)

This is a simplified problem, in my code, generally I have more than 2 leves of class inheritance, so things get more complicated.

I hope I explained myself correctly. Thanks in advance.