【问题标题】:Do I need custom allocators for shared pointers?我需要自定义分配器来共享指针吗?
【发布时间】:2013-11-20 10:00:02
【问题描述】:

如果我重写 operator new 和 operator delete(或传递自定义删除器),传递分配器有什么用? shared_ptr 会在构造和解构之外的其他时间进行分配和释放吗?

【问题讨论】:

  • 如果您为您的程序提供了一个内存池,您需要分配一个内存池,那么您可能会提供一个分配器,这不是真的吗? IOW,如果我管理自己的内存,无论出于何种原因,我都希望系统按照我认为合适的方式“分配”内存,即,如果我没记错的话,不会占用大量不需要的空间,不幸的是在某些情况下。
  • 无论如何我都会写一个分配器,因为容器需要它。我在这里要问的是为什么 shared_ptr 需要分配器,因为指向已分配内存的指针已经传递给构造函数。我应该期望 shared_ptrs 在幕后自行分配东西吗?
  • 我可能会小心地说分配器是一般容器所需要的。正如我所读的那样,该标准允许分配器,但正如您所说的那样不是必需的。 queue 在容器类中,但不需要提供分配器。
  • 自然而然。我的意思是说我们将使用的容器需要它。 :)

标签: c++ memory-management shared-ptr


【解决方案1】:

传递给 boost::shared_ptr 的分配器用于分配共享指针的内部细节(共享/弱引用计数),与传入的对象无关,您将已经分配,​​如你指出了。

这是关于该主题的另一个答案: Boost shared_ptr: How to use custom deleters and allocators

【讨论】:

    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2021-11-07
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多