如何使用 std::make_shared 创建动态大小缓冲区

How to create dynamic size buffer with std::make_shared

本文关键字:动态 缓冲区 创建 何使用 std make shared      更新时间:2023-10-16

我想优化下一个方法

auto MakeBuffer(size_t size)
{
    return std::shared_ptr<uint8_t>{new uint8_t[size], std::default_delete<uint8_t[]>()};
}

如您所见,缓冲区分两个阶段创建:

  • 为缓冲区分配内存
  • 创建shared_ptr(并为控制分配内存引擎盖下的对象)

在一般情况下,我们可以通过使用 std::make_shared 来避免双重分配。但是我该如何为动态大小缓冲区执行此操作?std::allocate_shared 不是解决方案(如果我理解正确的话),因为自定义分配器旨在仅创建对象而不是控制块

修复了缓冲区清理中的错误

如果可以改用boost

return boost::make_shared<uint8_t[]>(size);

似乎有人提议将扩展添加到标准中,但我不知道它的结果如何。也许它将成为未来标准的一部分。更新:现在是C++20。