c++ - boost::shared_ptr 中的 ref_count

标签 c++ boost

请参阅下面的代码.. 最后一个 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 可能是 p1p2。根据您的理解,p1在被销毁时可能会错误地销毁托管对象,即使p2仍然拥有该对象。

关于c++ - boost::shared_ptr 中的 ref_count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46556660/

相关文章:

c++ - 从 boost 序列化文件中读取会抛出异常

c++ - boost::hana::map 作为数据成员

c++ - Linux 终端应用程序中基于像素的图形

c++ - 输出到文件或 cout 的通用流——C++

c++ - 如何修复 <function-style-cast> 错误 : Cannot convert from 'initializer list' to asdendingCompare<W>(template functor)

c++ - 链接 boost 时出错

c++ - 线程等待父级

c++ - 比较将整数值转换为字符串的 3 种现代 C++ 方法

c++ - 测量任何函数运行时间,并获取函数返回值

c++ - Boost C++ 库链接器错误 libboost_serialization-vc100-mt-gd-1_47.lib