Boost logo

Boost Users :

From: Thorsten Ottosen (nesotto_at_[hidden])
Date: 2004-10-13 15:55:37


"David Jones" <djones_at_[hidden]> wrote in message
news:0B1A338441015A44AB55AAC0083EB78D64F5F0_at_exchange.keymark.com...

| There are a couple of reasons that std::list<boost::shared_ptr> is less
| than ideal.
|
| First, using the algorithms becomes cumbersome/annoying.

| Second, I would lose the ability to store iterators and then check them
| later for validity.

your first requirement fits the smart container library perfect.

your second requirement is really not there.

| Fundamentally, I don't want to be storing a "list of nodes of shared
| pointers of objects" but a "list of nodes of objects whose pointers to
| each other are shared pointers". And I want the iterators to be weak
| pointers to the nodes.

This is certainly an interesting problem senario. I have still to decide a
specialization
of my containers for smart pointers; eg, ptr_vector< boost::shared_ptr<T> >
can be made to do
what we find most important.

The question of whether to have iterator invalidation is interesting and I bet
it can be done, but is it worth the price?
Why not just stored a shared_ptr<T> instead of the iterator?

Some design alternatives could be

typedef ptr_list< shared_ptr<T> > list_t;
list_t list;
list.weak_begin(); // returns indirected iterator as you want
list.begin(); // returns normal indirected iterator
list_t::observed_ptr sp = list.observe( iterator ); // returns shared_ptr to
element
list_t::weak_observed_ptr wp = list.weak_observe( iterator ); // returns
weak_ptr to element

br

Thorsten


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