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
changed.

> (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
http://www.boost-consulting.com

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