我想优化下一个方法
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 不是解决方案(如果我理解正确的话),因为自定义分配器旨在仅创建对象而不是控制 block
编辑。修复了缓冲区清理中的错误
最佳答案
如果可以使用boost
相反:
return boost::make_shared<uint8_t[]>(size);
似乎有一个 proposal将扩展添加到标准中,但我不知道它变成了什么。也许它将成为 future 标准的一部分。 更新:它在 C++20 中。
关于c++ - 如何使用 std::make_shared 创建动态大小的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37698377/