You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何std::shared_ptr的use_count()输出为2而非3?求技术解答

为什么这段shared_ptr代码的use_count是2而非3?

嘿,这个问题问得很到位!咱们一步步拆解你的代码,就能搞清楚引用计数为啥是2啦~

首先先把你的代码贴出来方便对照:

int main() { 
    std::shared_ptr<int> x(new int); 
    std::shared_ptr<int> const& y = x; 
    std::shared_ptr<int> z = y; 
    std::cout << x.use_count() << std::endl; 
    return 0; 
}

咱们逐行分析引用计数的变化:

  • 第一行std::shared_ptr<int> x(new int);:这里创建了第一个shared_ptr实例x,它指向新分配的int内存,此时引用计数是1。
  • 第二行std::shared_ptr<int> const& y = x;:这里的y只是x的常量引用,并不是一个新的shared_ptr对象!shared_ptr的引用计数只在创建新的shared_ptr实例(或者用一个shared_ptr给另一个赋值)的时候才会递增,引用不会改变计数,所以这一步之后引用计数还是1。
  • 第三行std::shared_ptr<int> z = y;:这里创建了新的shared_ptr实例z,它通过y(也就是x的引用)来构造,这时候会触发引用计数的递增,现在引用计数变成了2。

所以最后输出x.use_count()的时候,结果就是2啦。核心要点记住:shared_ptr的引用计数统计的是指向同一块内存的shared_ptr对象实例数量,而不是引用的数量,引用不会让计数增加哦~

内容的提问来源于stack exchange,提问作者bencemeszaros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:11:17