“单一分配”对于boost :: make_shared意味着什么

时间:2011-08-12 17:45:54

标签: c++ boost shared-ptr smart-pointers make-shared

make_shared的提升文档中,它说:

  

除了方便和风格之外,这样的功能也是异常安全且相当大的   更快,因为它可以使用对象及其对应的单个分配   控制块,消除了shared_ptr构建开销的很大一部分。

我不明白“单一分配”的含义,这是什么意思?

2 个答案:

答案 0 :(得分:12)

“分配”表示从对分配器的调用中获得的内存块。

通常,使用指针构造函数创建shared_ptr为“控制块”分配内存,该控制块保存引用计数和删除器。 shared_ptr的副本都引用相同的控制块,以便它们共享引用计数。因此,总共有两个分配 - 对象本身和由shared_ptr创建的控制块。

如果您创建对象shared_ptrmake_shared,则只进行一次分配。您可以将其视为具有两个成员的单个结构:

  1. 正在管理的对象
  2. 控制块。

答案 1 :(得分:4)

shared_ptr需要为引用计数分配空间。这意味着您将动态创建对象(一个分配)并将其传递给shared_ptrmake_shared将分配计数(第二次分配)。 {{1}}执行足够大的单个分配,然后构造计数和对象。