C++:对同一对象的两个单独的 `make_shared` 调用将创建两个单独且独立的 shared_ptr 及其控制 block ?

标签 c++ shared-ptr smart-pointers

  1. 在下面的代码中,我的理解是 a 和 b 不共享所有权。相反,它们是两个独立的智能指针,每个都有单独的控制 block ,ref_count = 1。 我的理解正确吗?
std::shared_ptr<Foo> a = make_shared<Foo>();
std::shared_ptr<Foo> b = make_shared<Foo>();
  1. 使用共享所有权和增加 ref_cnt 的 shared_ptr 的正确方法是调用一次 make_shared 来初始化内存并使用复制/分配来增加 ref_cnt 和共享所有权。例如:
std::shared_ptr<Foo> a = make_shared<Foo>();
auto b = a;
auto b(a);

我上面说的两点对吗?

提前致谢!

最佳答案

您在所有方面都是正确的。让多个 shared_ptr 对象链拥有同一个对象不是一个好主意。

关于C++:对同一对象的两个单独的 `make_shared` 调用将创建两个单独且独立的 shared_ptr 及其控制 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65962777/

相关文章:

c++ - (C++)将 vector 保存到.txt数据库中的问题

英特尔 12.1.3 的 c++ shared_ptr 错误

c++ - 创建引用自身的类的智能指针成员是 C++ 中优雅的设计模式吗?

C++ 路径查找中的指针所有权

c++ - 智能指针及其在整个程序中的依赖,一次使用

C++ 重新定义命名空间的变量?

c++ - 从 C++ 中的实例化进程获取输出的可靠方法是什么?

c++ - OS X 上 std::enable_shared_from_this<> 的编译错误

c++ - 函数模板 : default type parameter

c++ - 如何传递对 std::shared_ptr 管理的指针的引用