2016-06-08 61 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添加擴展標準,但我不知道變成什麼吧。也許這將成爲未來標準的一部分。