|
Boost Users : |
From: Steven T. Hatton (hattons_at_[hidden])
Date: 2006-12-01 07:03:13
Why is there no counterpart for boost::weak_ptr that works with
boost::intrusive_ptr? It's certainly possible to set up cycles with
boost::intrusive_ptr. A simple example where intrusive_ptr is the right
thing to use, and where the problem arrises is a tree structure. It is
sometimes useful to maintain a bidirectional pointer relationship between
children and parent nodes in a tree. Ideally, deleting the root of a tree
will cascade down to delete all intermediate and leaf nodes which are not
referenced by some other object. If both the downward and upward pointers
are intrusive, removing the pointer to the root will result in orphaned data
because the upward pointers prevent the root node from being deleted, while
the downward pointers prevent the child nodes (and their upward pointers)
from being removed.
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. All of these options detract
significantly from the value of boost::intrusive_ptr.
I have the impression that in the past people have used intrusive pointers for
the "wrong things", and this has caused them to get an overall bad
reputation. IMO, they do have a place in good software design.
Any thoughts on this topic?
Steven
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