以下代码片段展示了不同方法中的引用计数。有人可以解释一下为什么这些值是不同的吗?
class Foo {
};
void f1( const std::shared_ptr<Foo>& ptr ) {
std::cout << "f1(): counts: " << ptr.use_count() << std::endl;
}
void f2( const std::shared_ptr<const Foo>& ptr ) {
std::cout << "f2(): counts: " << ptr.use_count() << std::endl;
}
int main() {
std::shared_ptr<Foo> ptr( new Foo );
std::cout << "main(): counts: " << ptr.use_count() << std::endl;
f1( ptr );
f2( ptr );
std::cout << "main(): counts: " << ptr.use_count() << std::endl;
return 0;
}
相应的输出:
main(): counts: 1
f1(): counts: 1
f2(): counts: 2
main(): counts: 1
make_shared
而不是new
。具体原因可以参考这篇文章:https://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/ - Tas