哪一行代码使shared_ptr的引用计数增加?

时间:2018-05-13 12:13:10

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

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

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

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

当然,它必须是在构造,赋值和复制构造上执行的一行。在库源文件中查找这三个。

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

但它不漂亮......

答案 1 :(得分:3)

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

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