在 make_shared 的 boost 文档中,它说:
Besides convenience and style, such a function is also exception safe and considerably faster because it can use a single allocation for both the object and its corresponding control block, eliminating a significant portion of shared_ptr's construction overhead.
我不明白“单一分配”的意思,是什么意思?
最佳答案
“分配”是指通过调用分配器获得的内存块。
通常,使用指针构造函数创建 shared_ptr
会为“控制 block ”分配内存,其中包含引用计数和删除器。 shared_ptr
的拷贝都引用同一个控制 block ,因此它们共享引用计数。因此总共有两个分配 - 对象本身和 shared_ptr
创建的控制 block 。
如果您创建对象和 shared_ptr
以及 make_shared
,则只会进行一次分配。您可以将其视为具有两个成员的单个结构:
- 被管理的对象
- 控制 block 。
关于c++ - "single allocation"对 boost::make_shared 意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044168/