Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2005-01-02 11:17:06

Ernst Murnleitner wrote:
> Hello Readers,
> I have a question regarding boost::intrusive_ptr and
> std::list::iterator.
> I have a std::list<boost::intrusive_ptr<CDataset> > which holds my
> datasets.
> My question: Is the increment counter of the intrusive_ptr incremented
> only by doing the following (assigning a iterator to a dataset)?

[I assume you mean the "reference counter," not the "increment counter."]

Not even by doing that. It is only incremented when an intrusive_ptr is
copied or assigned, for example, when the contents of the outer list are

> (I
> could try myself, but I do not know what happens with other
> compilers/libraries)
> typedef List std::list<boost::intrusive_ptr<CDataset> >;
> List list;
> ....
> // List holds datasets
> ....
> // Get an iterator:
> List::iterator iter = list.begin();
> // Is the Increment counter of the dataset incremented by this action?

None of the actions shown above will cause any reference counts to be
incremented (or decremented).

> // Or does the iterator not necessarily keep a pointer to the dataset
> directly?

It does not neccessarily have any particular internal representation,
though in practice it does keep a raw pointer to an
intrusive_ptr<CDataset>. But manipulating a raw pointer to a smart
pointer doesn't alter any reference counts.

Dave Abrahams
Boost Consulting

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at