Boost logo

Boost Users :

From: Nat Goodspeed (ngoodspeed_at_[hidden])
Date: 2006-12-01 13:07:08


> -----Original Message-----
> From: boost-users-bounces_at_[hidden] [mailto:boost-users-
> bounces_at_[hidden]] On Behalf Of Steven T. Hatton
> Sent: Friday, December 01, 2006 7:03 AM
> To: Boost-users_at_[hidden]
> Subject: [Boost-users] boost::weak_ptr and boost::intrusive_ptr
>
> Intrusive pointers are, IMO, the correct mechanism to hold a
> tree together. They are efficient, effective, and easy to
> understand. They work better than shared pointers for
> recursive data structures. Unfortunately the lack of a
> corresponding weak_ptr to go with boost::intrusive_ptr means I
> either use a raw pointer to the parent, devise a strategy for
> decrementing the pointers myself, or create my own weak
> pointer.

[Nat] I've thought about this problem to some extent. This is the way I
see it so far.

The one big advantage of a weak_ptr over a raw pointer is that the
weak_ptr can tell you when its referent becomes invalid.

If your data structure requires storing a pointer in a place which
itself becomes invalid as soon as the referent becomes invalid (e.g.
recursive deletion of a subtree), then I'm not convinced that weak_ptr
is significantly better than a raw pointer.

(Even "snipping loose" a subtree, but preserving it, doesn't seem to
argue for weak_ptr as a parent pointer. In such a case, you'd want to
clear the parent pointer anyway, wouldn't you?)

Does this rationale make sense, or am I overlooking something?

I'm not rejecting the idea of a weak_ptr that works with intrusive_ptr.
I'm just saying that for certain use cases, raw pointers seem to address
the requirements equally well -- with less runtime overhead. This case
looks like one of them.


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