【问题标题】:Which line of the code make the reference count of a shared_ptr increasing?哪一行代码使 shared_ptr 的引用计数增加?
【发布时间】:2018-05-13 12:13:10
【问题描述】:

我正在寻找一种方法来确定哪一行代码负责增加 shared_ptr 的引用计数?例如,假设我有一个智能指针并且它的引用计数是 12。我倾向于知道我的项目中的哪一行 c++ 代码或赋值运算符负责,只要它是 13。

感谢您的帮助

【问题讨论】:

  • 调试器。断点。引用计数为 13 的断点条件。
  • 按值将 shared_ptr 传递给函数将继续增加计数。为避免这种情况,您可以通过引用传递 shared_ptr。

标签: c++ c++11 smart-pointers


【解决方案1】:

这是依赖于标准库实现的,因为 shared_ptr 的实现不是语言标准的一部分。

当然,它必须是在构造、分配和复制构造时执行的行。在库源文件中查找这三个。

如果你真的必须看一个例子,GCC 的 libstdc++' 共享 ptr 代码在这里:

但它并不漂亮....

【讨论】:

    【解决方案2】:

    shared_ptr 的引用计数是共享共同所有权的shared_ptr 对象的数量。因此,每当您使用采用weak_ptr 或左值shared_ptr 的构造函数创建新的shared_ptr 时,并且每当您将左值shared_ptr 分配给另一个shared_ptr 时,都会增加引用计数。

    请注意,复制(实际上是移动)shared_ptr 类型的右值不会修改引用计数,因为右值是从移动(清空)的,因此引用是转移而不是添加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多