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

ato*_*omd 9 c++ boost smart-pointers shared-ptr make-shared

make_shared的boost文档中,它说:

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

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

Ste*_*sop 12

"分配"表示从对分配器的调用获得的存储器块.

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

如果你创建对象和shared_ptr一起make_shared,那么只有一个已做出分配.您可以将其视为具有两个成员的单个结构:

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