【发布时间】:2018-10-22 09:35:08
【问题描述】:
我有一个问题,请通过以下简单的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 对象中的一个变量。
【问题讨论】:
-
Vittorio 的答案是完美的,但值得退一步问自己:您描述的引用计数是否真的计算引用的数量?如果没有,它有什么用,为什么有人会编写具有该功能的智能指针?
-
“据我所知,引用计数是每个
shared_ptr对象中的一个变量。” 这怎么可能起作用?如果每个对象都不知道您何时复制 其他 对象,那么引用计数将毫无意义。 -
这个问题没有特定的版本 - 甚至没有特定的标准,关于 boost 中的
shared_ptr的相同问题将有完全相同的答案。这是一个关于拥有引用计数所有权的智能指针的一般问题。 -
@JonathanWakely 公平地说,他们意识到了这一点,因此提出了问题
-
一个更好的问题可能是:为什么所有三个引用计数都相同?一旦你回答了这个问题,你的问题就会自行回答
标签: c++ shared-ptr smart-pointers reference-counting