He Ethann,


On 1/23/07, ethann.castell@caliton.com <ethann.castell@caliton.com > wrote:
class B1 : public B
{
public:
        B1(boost::shared_ptr<base_class> pLinked) : B( pLinked){}
        ~B1()
        {
                try{
                        boost::shared_ptr<base_class> ptr_This = shared_from_this();                // Exception occurs here

Let me explain why this is exception is thrown. As I said before the object has to be owned by a shared_ptr whenever your are calling shared_from_this(). To trigger the object's destruction (we are in the destructor) somebody called delete on the object. This can only be the case if the last shared_ptr released the object (i f there isn't another error). Therefore you are not allowed to call shared_from_this() anymore.
 
                if (f == 3){
                        boost::shared_ptr<B2> ptr_b2( new B2(ptr_me) ) ;                        // create new B2 and pass pointer to me.
                }else{                                                        // crashes with bad_weak_ptr error on this line.

This is the same problem again. The exception is thrown by B1's destructor (B2 is derived from B1).

Best regards,
Philipp