哪一行代码使 shared_ptr 的引用计数增加?
Posted
技术标签:
【中文标题】哪一行代码使 shared_ptr 的引用计数增加?【英文标题】:Which line of the code make the reference count of a shared_ptr increasing? 【发布时间】:2018-05-13 12:13:10 【问题描述】:我正在寻找一种方法来确定哪一行代码负责增加 shared_ptr 的引用计数?例如,假设我有一个智能指针并且它的引用计数是 12。我倾向于知道我的项目中的哪一行 c++ 代码或赋值运算符负责,只要它是 13。
感谢您的帮助
【问题讨论】:
调试器。断点。引用计数为 13 的断点条件。 按值将 shared_ptr 传递给函数将继续增加计数。为避免这种情况,您可以通过引用传递 shared_ptr。 【参考方案1】:这是依赖于标准库实现的,因为 shared_ptr 的实现不是语言标准的一部分。
当然,它必须是在构造、分配和复制构造时执行的行。在库源文件中查找这三个。
如果你真的必须看一个例子,GCC 的 libstdc++' 共享 ptr 代码在这里:
bits/shared_ptr_base.h bits/shared_ptr.h但它并不漂亮....
【讨论】:
【参考方案2】:shared_ptr
的引用计数是共享共同所有权的shared_ptr
对象的数量。因此,每当您使用采用weak_ptr
或左值shared_ptr
的构造函数创建新的shared_ptr
时,并且每当您将左值shared_ptr
分配给另一个shared_ptr
时,都会增加引用计数。
请注意,复制(实际上是移动)shared_ptr
类型的右值不会修改引用计数,因为右值是从移动(清空)的,因此引用是转移而不是添加。
【讨论】:
以上是关于哪一行代码使 shared_ptr 的引用计数增加?的主要内容,如果未能解决你的问题,请参考以下文章