Understanding C++ std::shared_ptr

  • A+
Category:Languages

I have a question, please go through the following simple C++ program,

int main( ) {  shared_ptr<int> sptr1( new int );  shared_ptr<int> sptr2 = sptr1;  shared_ptr<int> sptr3;  shared_ptr<int> sptr4;  sptr3 = sptr2;   cout<<sptr1.use_count()<<endl;  cout<<sptr2.use_count()<<endl;  cout<<sptr3.use_count()<<endl;   sptr4 = sptr2;   cout<<sptr1.use_count()<<endl;  cout<<sptr2.use_count()<<endl;  cout<<sptr3.use_count()<<endl;   return 0; } 

Output:

3 3 3 4 4 4 

How does sptr1 and sptr3 objects know reference count is incremented as it prints 4.

As far as I know reference count is a variable in each shared_ptr object.

 


As far as i know reference count is a variable in each shared_ptr object.

No, the reference count is stored in a "control block" on the heap. Every shared_ptr instance points to the same "control block" and keeps it alive (until all instances are dead).

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: