请参阅下面的代码.. 最后一个 cout 将 p1 的 use_count 打印为 2,这很好,因为 p2 存储了 p1。为什么最后一行p2的use_count也打印2?因为 p2 是一个只存储 p1 的共享指针,所以它不应该是 1 吗?
boost::shared_ptr<int> p1{new int{1}};
std::cout << *p1 << '\n';
std::cout << "--> " << p1.use_count() << "\n";
boost::shared_ptr<int> p2{p1};
std::cout << "--> " << p1.use_count() << " : " << p2.use_count() << "\n";
最佳答案
use_count(和托管指针)在关联的shared_ptr
之间<em>共享。这使得最后一个 shared_ptr
在托管指针被销毁时可以销毁它。
请注意,最后一个 shared_ptr
可能是 p1
或 p2
。根据您的理解,p1
在被销毁时可能会错误地销毁托管对象,即使p2
仍然拥有该对象。
关于c++ - boost::shared_ptr 中的 ref_count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46556660/