【问题标题】:How to create dynamic size buffer with std::make_shared如何使用 std::make_shared 创建动态大小缓冲区
【发布时间】:2022-05-13 15:45:30
【问题描述】:

我想优化下一个方法

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

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

【问题讨论】:

  • 优化前,修复。您当前的方法已损坏(想想new/deletenew[]/delete[]

标签: c++ std


【解决方案1】:

如果您可以改用boost

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

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

【讨论】:

  • C++20 对数组进行了共享
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 2012-02-06
  • 2019-09-29
相关资源
最近更新 更多