2016-06-08 92 views
1

我想优化下一个方法如何创建动态大小的缓冲区的std :: make_shared

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

优化之前,修复。你当前的方法被破坏了(认为'new/delete'与'new []/delete []') – juanchopanza

回答

1

修正了如果你可以使用boost代替:

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

有似乎是一个proposal添加扩展标准,但我不知道变成什么吧。也许这将成为未来标准的一部分。