相关疑难解决方法(0)

为什么在std :: shared_ptr实现中需要两个指向托管对象的原始指针?

这里引用了cppreference的实现说明部分std::shared_ptr,其中提到有两个不同的指针(如粗体所示):可以返回的指针get(),以及控制块中保存实际数据的指针.

在典型的实现中,std::shared_ptr只保留两个指针:

  1. 存储的指针(返回一个get())
  2. 指向控制块的指针

控制块是一个动态分配的对象,它包含:

  1. 指向托管对象的指针或托管对象本身
  2. 删除(类型擦除)
  3. 分配器(类型擦除)
  4. 数量shared_ptrs是自己的管理对象
  5. 的数目weak_ptrs引用该管理对象

shared_ptr直接保持的指针是由返回get()的指针,而控制块保持的指针或对象是当共享所有者的数量达到零时将被删除的指针或对象.这些指针不一定相等.

我的问题是,为什么托管对象需要两个不同的指针(两个粗体)(除了指向控制块的指针)?那个回来的人get()不够吗?为什么这些指针不一定相等?

c++ pointers shared-ptr c++11

37
推荐指数
1
解决办法
3000
查看次数

使用make_shared时会发生什么

我感兴趣的是这两行代码是否相同:

shared_ptr<int> sp(new int(1)); // double allocation?
shared_ptr<int> sp(make_shared<int>(1)); // just one allocation?
Run Code Online (Sandbox Code Playgroud)

如果这是真的,有人可以解释为什么在第二行只有一个分配?

c++ smart-pointers make-shared c++11

26
推荐指数
2
解决办法
4414
查看次数

标签 统计

c++ ×2

c++11 ×2

make-shared ×1

pointers ×1

shared-ptr ×1

smart-pointers ×1