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