Boost logo

Boost Users :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2002-11-28 07:28:19


From: "Hickman, Greg" <greg.hickman_at_[hidden]>

[...]

> Its seems the leaf itself must implement the factory method/weak_this
idiom.
> This initially didn't seem like a good idea in our case since clients
write
> the leaves - we only provide X. But on second thought, perhaps two
> alternatives are (1) provide a helper template for clients to use when
> deriving from X to automatically declare the static create()/weak_this
pair,

Yes, this is what I have done in the CVS with enable_shared_from_this. You
could provide

template<class T> class enable_shared_from_this
{
private:

    weak_ptr<T> weak_this;

public:

    static shared_ptr<T> create()
    {
        shared_ptr<T> pt(new T);
        pt->weak_this = pt;
        return pt;
    }

    shared_ptr<T> shared_from_this()
    {
        shared_ptr<T> pt(weak_this);
        return pt;
    }
};

and let clients define their leaves as

class leaf: public enable_shared_from_this<leaf>
{
// ...
};

> or (2) use an intrusive reference counting approach for X.
>
> If an intrusive approach ultimately works better for us, what should I do
as
> a boost 1.29.0 user: use counted_base/shared_from_this, or intrusive_ptr
> (which I admittedly haven't even looked at)?

The counted_base/shared_from_this mechanism will not be present in the next
release, so if the above doesn't work for you, it seems that intrusive_ptr
would be a better choice.


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