$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Ernst Murnleitner (mur_at_[hidden])
Date: 2005-01-06 06:31:56
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;
}