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

时间:2016-06-08 09:23:28

标签: c++ std

我想优化下一个方法

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不是解决方案(如果我理解正确的话),因为自定义分配器旨在仅创建对象而不是控制块

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

1 个答案:

答案 0 :(得分:1)

如果您可以改为使用boost

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

似乎有proposal添加标准的扩展名,但我不知道它的内容。也许它将成为未来标准的一部分。