Boost logo

Boost Users :

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;
}


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