Boost logo

Boost Users :

From: James Hughes (JHughes_at_[hidden])
Date: 2006-03-20 05:13:23


Hello All,

I have a couple of classes that I want to self register themselves with a
monitoring class. To do this they must pass a shared_ptr of themselves to
the monitor register function.

Therefore I need to make a shared_ptr form the this pointer, in the
constructor.

I have derived my classes from enabled_shared_from_this...(code to get
monitor omitted)

//psuedo code..
monitor::AddSource1(boost::shared_ptr<CSource1>);
monitor::AddSource2(boost::shared_ptr<CSource2>);

class CSource1 : public enable_shared_from_this<CSource1>
{
        CSource1() { Monitor->AddSource(shared_from_this()); };
}

and

class CSource2 : public base1, public enable_shared_from_this<CSource2>
{
        CSource2() { Monitor->AddSource(shared_from_this()); };}
}

This all compile fine, but when run, the shared_from_this call asserts with
a bad weak ptr - at the time of calling the weak_ptr has no content, and
looking at the boost code, I cannot see where it is supposed to get set to
access the this value.

Should I be using enable_shared_from_this in this way or is there a better
way to convert the this ptr to a shared_ptr in a constructor that I need to
use.

James


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