我有一个问题,请通过以下简单的C程序,
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; }
输出:
3 3 3 4 4 4
sptr1和sptr3对象如何知道引用计数在打印4时递增.
据我所知,引用计数是每个shared_ptr对象中的变量.
解决方法
As far as i know reference count is a variable in each shared_ptr object.
不,引用计数存储在堆上的“控制块”中.每个shared_ptr实例都指向相同的“控制块”并使其保持活动状态(直到所有实例和与它们共享所有权的所有weak_ptr实例都已死).