【发布时间】: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/delete与new[]/delete[])