Boost logo

Boost Users :

From: Stephen Crowley (stephenc_at_[hidden])
Date: 2002-12-17 12:37:56


On Tue, Dec 17, 2002 at 08:10:31AM -0800, Darin Adler wrote:
>
> On Tuesday, December 17, 2002, at 06:44 AM, Michael Brinkmann wrote:
>
> > Is there an elegant way to get the shared_ptr pointing to "this" from
> > "this", which would be the solution to the fault?
>
> Yes. There is a relatively new feature in the latest versions of
> shared_ptr, shared_from_this.
>
> The way you use it in Boost 1.29.0 is to the class you want to store a
> pointer to inherit from boost::counted_base. You can use multiple
> inheritance if you already have another base class. Then you can use
> shared_from_this to turn a raw pointer to this class into a shared_ptr.
> I expect this feature is going to be in future versions of shared_ptr,
> but the name of the class you have to inherit from may change.

I just tried this on my own code and have the problem where now some of my
classes are being destroyed twice and crashing. What prevents a class
inherting from counted_base from doing this?

I have my own implementation called smart_ptr which is based on smart_ptr
and weak_ptr, which is used in pretty much the same way.

public MyClass: public smart_class<MyClass>
{
...
}

It has the advantage of being able to use 'this' without
shared_from_this(this), and it doesn't destroy itself twice.

The code is here if anyone is interested

http://intolerance.digitalpassage.com/misc/smart_ptr.h

I thought inheriting from counted_base would make this unnecessary though,
shouldn't it?

-- 
Stephen

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