我正在寻找一种方法来确定哪一行代码负责增加 shared_ptr 的引用计数?例如,假设一个条件,我有一个智能指针,它的引用计数是12.我倾向于知道我的项目中的c ++代码或赋值运算符的哪一行负责,只要它是13。
感谢您的帮助
答案 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从(清空)移动,因此引用的是传输而不是添加。