Hello David,
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.
Thank you for your answer. Just for verification: the output is count = 1 2 3 4 5 5 6 Greetings, Ernst #include <iostream> #include <vector> #include "boost/intrusive_ptr.hpp" class C { public: C(){}; ~C(){}; void IncRef(){count ++;}; void DecRef(){count --; if (count <= 0) delete this;}; int GetCount(){return count;}; int count; }; typedef boost::intrusive_ptr<C> P; void intrusive_ptr_add_ref(C* c) { c->IncRef(); } void intrusive_ptr_release(C* c) { c->DecRef(); } int main(){ P p1(new C()); std::cout << "count = " << p1->GetCount() << std::endl; P p2 = p1; std::cout << "count = " << p1->GetCount() << std::endl; P p3 = p1; std::cout << "count = " << p1->GetCount() << std::endl; std::vector<P> vec; vec.push_back(p2); std::cout << "count = " << p1->GetCount() << std::endl; P p4 = vec[0]; std::cout << "count = " << p1->GetCount() << std::endl; std::vector<P>::iterator it = vec.begin(); std::cout << "count = " << p1->GetCount() << std::endl; P p5 = *it; std::cout << "count = " << p1->GetCount() << std::endl; return 0; }