c++ - "single allocation"对 boost::make_shared 意味着什么

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

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,则只会进行一次分配。您可以将其视为具有两个成员的单个结构:

  1. 被管理的对象
  2. 控制 block 。

关于c++ - "single allocation"对 boost::make_shared 意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044168/

相关文章:

c++ - 在不知道类型的情况下流式传输 std::any

c++ - 如何在 C++ 中获取 DLL 文件的版本信息

c++ - HelloWorld : downloading, 使用 CMake 构建和链接 Boost

c++ - 查找有向图中从根到所有顶点的给定长度的所有路径

具有智能指针的 C++11 复合模式

C++:对象的引用计数器

c++ - 如何将原始指针包装到 shared_ptr 中并防止 shared_ptr 删除对象?

c++ - 获取MySQL查询返回数据的类型

c++ - 迭代任意范围的 n 维数组的最快方法?

C++ boost : windows shared memory get_size() returns zero