【问题标题】:Does shared_ptr allocate when constructed from raw pointer?shared_ptr 从原始指针构造时是否分配?
【发布时间】:2020-03-14 01:54:55
【问题描述】:

据我了解 shared_ptr 它包含一个指向控制块的指针,该控制块包含原始指针强计数和弱计数。

我处于需要无锁分配的情况,因此我可以从池分配的内存中分配一个原始指针,然后使用自定义删除器创建一个唯一指针以将其放回池中,到目前为止不错。

但是,在 shared_ptr 的情况下,如果我使用这些原始指针和自定义分配器之一构造一个共享指针,它会在该点分配控制块吗?

如果有,有没有办法以无锁的方式为控制块提供内存?

【问题讨论】:

  • 你想避免什么锁?
  • @DavidSchwartz Recommended reading
  • @LightnessRaceswithMonica 谢谢。正如我所怀疑的那样,这表明这里无事可做。如果不是垃圾,您的平台已经做了正确的事情。
  • 我完全不是这么读的。

标签: c++ shared-ptr pool lock-free


【解决方案1】:

但是,在 shared_ptr 的情况下,如果我使用这些原始指针和自定义分配器之一构造一个共享指针,它会在该点分配控制块吗?

是的。

如果有,有没有办法以无锁的方式为控制块提供内存?

shared_ptr 的构造函数具有接受自定义分配器的重载。

请参阅some shared_ptr documentation

(我不太清楚whether the deleter will also be allocated by your custom allocator。)

【讨论】:

  • 这是否也为类型擦除删除器分配内存?
  • @AndreasLoanjoe 这是一个很好的问题!它,呃,似乎没有指定:O
  • @AndreasLoanjoe 我是asked this separately。如果我得到可接受的回复,将编辑此答案!
  • 嘿嘿嘿看起来是个热门问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2021-12-11
  • 1970-01-01
  • 2019-12-13
  • 2019-09-29
相关资源
最近更新 更多