|
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