
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